我已經給運行mySQL的服務器提供SSH訪問。我的訪問通過我的公鑰進行驗證,不需要其他密碼。mySQL連接字符串通過SSH隧道無密碼
使用Putty,我可以使用我的私鑰SSH連接到服務器,通過命令行工具直接登錄mySQL數據庫並直接運行SQL。我期望通過C#服務(通過SSH連接轉發端口3306)來模擬此操作,但不幸的是,所有在http://www.connectionstrings.com/mysql/處列出的連接字符串都需要密碼。
我的粗糙和準備代碼到目前爲止,使用MySql.Data
和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
部分中,並且一旦建立了隧道並且帶有斷點,我可以telnet到localhost:3306
並從mySQL獲得迴應。
但是,下面的錯誤是扔在connection.Open()
行:
認證主辦的「localhost」用戶「Ubuntu的」使用方法「mysql_native_password」失敗消息:拒絕訪問用戶「Ubuntu的」 @ 'localhost'(使用密碼:YES)
那麼......我需要什麼連接字符串?或者我錯過了其他地方微妙的東西?
使用SSH隧道,哪個服務器連接似乎來自 - 不會在服務器上sshd使它們看起來來自本地主機? –
我不知道,但看着錯誤,我*認爲*它。你可以使用命令行登錄到mysql mysql正在使用相同的憑據運行嗎? :mysql --host = localhost --user = ubuntu – Jaco
我剛剛嘗試過,是的,它確實給了我訪問權限。 –