C#から踏み台サーバを経由してSQL Serverに接続する
はじめに
複数人による開発でSQL Serverに接続できないかと考えました。
単純にEC2のポートを開けると不正にログインを試みるbotに耐えられずSQL Server が停止しまうため、踏み台サーバを経由した接続を行うことにしました。
全体像
A : 踏み台サーバ
B : データベースサーバ
A : 踏み台サーバ
SSH接続をする22番ポートを開けています。
またSSH接続用アカウントを新規作成しています。
今回はSSH.NETを使用してポートフォワーディングを行うため、踏み台サーバではポートフォワーディングの設定は行っていません。
B : データベースサーバ
SQL Serverの規定インスタンスに接続する1433番ポートを開けています。
ソースコード
C#からSSH接続が行えるSSH.NETを使用しました。
github.com
ソースコードはこちらです。
github.com
// 踏み台サーバのホスト名 string bastionServer = "XXXXXXXXXX"; // 踏み台サーバのアカウント名 string userName = "XXXXXXXXXX"; // 踏み台サーバのパスワード string password = "XXXXXXXXXX"; ConnectionInfo info = new ConnectionInfo(bastionServer, 22, userName, new AuthenticationMethod[] { new PasswordAuthenticationMethod(userName, password) } );
ForwardedPortLocal からポートフォワーディングを行っています。
// SQL Server 接続文字列 string connectionString = @"Data Source=127.0.0.1;Integrated Security=False;User ID=XXXXXXXXXX;Password=XXXXXXXXXX"; // データベースサーバのホスト名 string dbServer = "XXXXXXXXXX"; using (var client = new SshClient(info)) { client.Connect(); var forward = new ForwardedPortLocal("127.0.0.1", 1433, dbServer, 1433); client.AddForwardedPort(forward); forward.Start(); using (var connection = new SqlConnection(connectionString)) { using (var command = connection.CreateCommand()) { try { connection.Open(); connection.Open(); command.CommandText = @"SELECT count(*) AS count FROM employee";
結果
踏み台サーバを経由してSQL Server に接続する事ができました。
参考資料
C# で踏み台サーバー経由で RDS for MySQLに接続する方法 - 蒼の王座・裏口
Azure SQLDBにlinux踏み台サーバ経由で接続するには - Qiita
【SSH接続】Windows端末からパスワードなしでSSHログインする方法 | mathkuro
https://note.affi-sapo-sv.com/ssh-unprotected-key.php
Windows Server 2019 EC2インスタンスでSSHサーバーを有効にする | DevelopersIO
Windows/Linuxでポートフォワーディングする方法 - 備忘録
技術メモメモ: Windows Server 2019で標準サポートされた「OpenSSH」がすごく便利そうだった話