■101839 / inTopicNo.5) |
Re[4]: ubuntu サーバーへの接続について |
□投稿者/ YuO (1回)-(2023/04/28(Fri) 18:18:42)
|
■No101838 (伝説のカレー さん) に返信
> https://dev.mysql.com/blog-archive/ssh-tunneling-in-connector-net/
>
> ドライバがSSHトンネリングをサポートしているという情報もあり
> ワンチャンTera Termを使わなくてもいけるかもしれないです
これは、SSH.NETを使ってSSHトンネルを作る方法ですね。
ドライバがトンネリングをサポートしているのではなく、SSHのライブラリを使ってトンネルを自分で作っています。
以下、昔書いたコードを少し修正した物です。
この時は、パスワード無しの秘密鍵を使ってトンネルして接続していました。
なお、nugetでSSH.NETをインストールする必要があります。
const string SshHost = "example.com"; // SSH接続先サーバー名
const int SshPort = 22; // SSHポート番号
const string SshUser = "ssh-user"; // SSH接続ユーザー
const string SshFile = @"C:\Users\user\.ssh\id_ecdsa"; // SSH接続用秘密鍵
const string MySqlHost = "mysql-server"; // MySQLサーバー名 (SSH接続先サーバーから接続する名前やIPアドレス)
const int MySqlPort = 3306; // MySQLポート番号
const string MySqlUser = "mysql-user"; // MySQL ログインユーザー名
const string MySqlPassword = "mysql-password"; // MySQL ログインパスワード
const string MySqlDatabase = "mysql-database"; // MySQL データベース名
// SSHの接続。
var connectionInfo = new ConnectionInfo(SshHost, SshPort, SshUser, new AuthenticationMethod[]
{
new PrivateKeyAuthenticationMethod(SshUser, new PrivateKeyFile[]{
new PrivateKeyFile(SshFile, "")
})
});
using var ssh = new SshClient(connectionInfo);
ssh.Connect();
if (!ssh.IsConnected)
{
Console.WriteLine("接続失敗");
return;
}
// ポートフォワードの設定。ローカルポートは自動的に設定。
using var fpl = new ForwardedPortLocal("127.0.0.1", MySqlHost, MySqlPort);
ssh.AddForwardedPort(fpl);
fpl.Start();
if (!fpl.IsStarted)
{
Console.WriteLine("ポートフォワード失敗");
return;
}
// MySQLサーバーへの接続
var csb = new MySqlConnectionStringBuilder
{
Server = fpl.BoundHost,
Port = fpl.BoundPort,
UserID = MySqlUser,
Password = MySqlPassword,
Database = MySqlDatabase
};
using var conn = new MySqlConnection(csb.ToString());
conn.Open();
|
|