繁体   English   中英

通过SSH隧道的mySQL连接字符串,无需密码

[英]mySQL connection string through SSH tunnel without password

我已获得对运行mySQL的服务器的SSH访问权限。 我的访问通过我的公共密钥进行了身份验证,不需要其他密码。

使用Putty,我可以使用我的私钥SSH到服务器,通过命令行工具直接登录到mySQL数据库并直接运行SQL。 我正在寻找通过C#服务(通过SSH连接转发端口3306)进行仿真的方法,不幸的是, http://www.connectionstrings.com/mysql/上列出的所有连接字符串都需要密码。

到目前为止,我使用MySql.DataSSH.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部分,并在建立隧道后使用断点,然后可以telnet到localhost:3306并从mySQL返回响应。

但是,在connection.Open()行上引发以下错误:

使用方法“ mysql_native_password”对用户“ ubuntu”的主机“ localhost”的身份验证失败,并出现以下消息:用户“ ubuntu” @“ localhost”的访问被拒绝(使用密码:是)

那么...我需要什么连接字符串? 还是我错过了其他地方的微妙东西?

如果登录来自错误的主机,MySQL可以拒绝登录。 也许您不允许ubuntu从本地主机连接?

https://dev.mysql.com/doc/refman/5.1/zh-CN/connection-access.html

原来,该问题与SSH隧道本身有关。 而是使用Putty创建隧道,并删除该行之前运行的所有代码:

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

现在成功了。

吸取了两个教训:

  • 如果mySQL不需要密码,则可以省略密码。
  • mySQL的错误消息可能与更明确地显示有关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM