我已获得对运行 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
部分,并且一旦设置了隧道,就可以使用断点,我可以远程登录localhost:3306
并从 mySQL 获取响应。
但是,在线上会引发以下错误connection.Open()
:
使用方法'mysql_native_password'对用户'ubuntu'的主机'localhost'进行身份验证失败,并显示消息:用户'ubuntu'@'localhost'的访问被拒绝(使用密码:是)
那么......我需要什么连接字符串?还是我在其他地方错过了一些微妙的东西?