1

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)

だから...どの接続文字列が必要ですか? または、他の場所で微妙な何かを見逃したことがありますか?

4

2 に答える 2

0

この問題は、SSH トンネル自体に関連していることが判明しました。代わりにパテを使用してトンネルを作成し、行の前に実行されるすべてのコードを削除します。

  var connection = new MySqlConnection(
       "server=localhost;database=[database];uid=ubuntu;"
  );

今成功します。

2 つの教訓:

  • mySQL でパスワードが必要ない場合は、パスワードを省略できます。
  • mySQL のエラー メッセージは、より明示的にする必要があります。
于 2013-08-29T10:14:00.857 に答える