gpt4 book ai didi

mysql - 无法使用 SSH.Net 隧道连接到 C# 中任何指定的 MySQL 主机

转载 作者:行者123 更新时间:2023-11-29 05:28:28 25 4
gpt4 key购买 nike

我正在尝试使用使用 OpenSSH key 文件和 SSH.Net 库设置的 SSH 隧道连接到远程 mysql 服务器,如下面的代码部分所示...

try
{
PrivateKeyFile pkfile = new PrivateKeyFile("C:\\Users\\OpenSSHKey", "mypassword");
var client = new SshClient("servername.com", 22, "myusername", pkfile);
client.Connect();
if (client.IsConnected)
{
var local = new ForwardedPortLocal(22, "localhost", 3306);
client.AddForwardedPort(local);
try
{
local.Start();
}
catch (SocketException se)
{

}
string connStr = "server=localhost;user=mysql_username;database=database_name;port=3306;password=MyDBPassword;";
MySqlConnection sql = new MySqlConnection(connStr);
sql.Ping();
try
{
sql.Open();
}
catch (MySqlException se)
{
}
}
}
catch(Exception e)
{
}

隧道确实已建立,因为它在 sql.Open() 调用中抛出以下错误“无法连接到任何指定的 MySQL 主机”...

我确定数据库位于名为 mysername 的服务器上,因为我可以使用 putty 或 workbench 以及 MYSQL 连接字符串中使用的凭据连接到它...我希望有人能提供帮助

最佳答案

我刚刚自己解决了这个问题。只需将您的 ForwardedPortLocal 更改为:

    var local = new ForwardedPortLocal("127.0.0.1", 3306, "127.0.0.1", 3306);

在您的原始文件中,您将源端口指定为 22。但是,您的 MySql 连接将连接到本地计算机上的端口 3306(然后您将通过隧道连接到目标上的端口 3306),因此您需要确保转发的端口正在本地监听从 3306 开始。

此外,我已将 localhost 更改为 127.0.0.1。我遇到的第二个问题是我机器上的 localhost 实际上解析为 ::1,一个 IPv6 地址,而目标服务器没有“使用”IPv6。通过将其切换到 127.0.0.1(本地主机的 IPv4 版本),它确保默认使用 IPv4。

关于mysql - 无法使用 SSH.Net 隧道连接到 C# 中任何指定的 MySQL 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17364927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com