mySQL を実行しているサーバーへの SSH アクセスが許可されています。アクセスは公開鍵によって認証され、それ以上のパスワードは必要ありません。
Putty を使用すると、秘密鍵を使用してサーバーに SSH 接続し、コマンドライン ツールを介して mySQL データベースに直接ログインし、SQL を直接実行できます。C# サービス (SSH 接続を介してポート 3306 を転送) を介してこれをエミュレートしようとしていますが、残念ながらhttp://www.connectionstrings.com/mysql/にリストされているすべての接続文字列にはパスワードが必要です。
MySql.Data
これまでのところ、 andを使用した大まかなコードSSH.NET
:
PrivateKeyFile file = new PrivateKeyFile(@" [ path to private key ]");
using (var client = new SshClient(" [ server ] ", "ubuntu", file))
{
var port = new ForwardedPortLocal(3306, "localhost", 3306);
client.AddForwardedPort (port);
client.Connect();
var connection = new MySqlConnection(
"server=localhost;database=[database];uid=ubuntu;"
);
MySqlCommand command = connection.CreateCommand();
MySqlDataReader Reader;
command.CommandText = "select * from sample";
connection.Open();
Reader = command.ExecuteReader();
while (Reader.Read())
{
string thisrow = "";
for (int i = 0; i < Reader.FieldCount; i++)
thisrow += Reader.GetValue(i).ToString() + ",";
Console.Write(thisrow);
}
connection.Close();
client.Disconnect();
}
セクションなしでコードを実行し、SshClient
(既知のユーザー名とパスワードを使用して) ローカル ネットワーク上のデータベースと通信すると、完全に機能します。SshClient
セクションを挿入し、トンネルが設定されたらブレークポイントを使用して、mySQL に telnet で接続localhost:3306
し、応答を得ることができます。
ただし、次のエラーがconnection.Open()
行にスローされます。
メソッド 'mysql_native_password' を使用したユーザー 'ubuntu' のホスト 'localhost' への認証が次のメッセージで失敗しました: ユーザー 'ubuntu'@'localhost' のアクセスが拒否されました (パスワードを使用: YES)
だから...どの接続文字列が必要ですか? または、他の場所で微妙な何かを見逃したことがありますか?