c# - 通过 SSH.NET ForwardedPortLocal 从 .NET 代码连接到 MySQL 不起作用
问题描述
我必须通过外部网络访问具有 IP (1.1.1.1) 的计算机上的 MySQL 数据库。
我用 SSH.NET 创建了一个隧道,但是我无法访问 MySQL 中数据库所在计算机的 IP(1.1.1.1)。
直到公共 IP,隧道似乎都可以工作,但我无法访问计算机 IP (1.1.1.1),因为我不了解 SSH.NET 的工作原理。使用 PuTTY 输入端口的公共 IP,并在 SSH 隧道部分插入具有端口 3306 的 IP 计算机(1.1.1.1),它运行良好。代码是这样的
using (var client = new SshClient("ip public", port, "user", "password"))
{
client.Connect();
if (client.IsConnected)
{
var portForwarded = new ForwardedPortLocal("127.0.0.1",22, "1.1.1.1",3306);
client.AddForwardedPort(portForwarded);
portForwarded.Start();
string db = @"Server=127.0.0.1;Port=3306;Database=xxx;Uid=root;Pwd=xxx;";
{
var mySQLCon = new MySqlConnection(db);
mySQLCon.Open();
if (mySQLCon.State == ConnectionState.Open)
{
MainWindow stx = new MainWindow(db);
stx.ShowDialog();
}
}
}
}
我把参数放错了ForwardedPortLocal
吗?
ForwardedPortLocal("127.0.0.1",22, "1.1.1.1",3306);
我想知道我ForwardedPortLocal
是否正确输入了参数,或者我在使用 SSH.NET 建立隧道时错在哪里......
解决方案
的boundPort
参数ForwardedPortLocal
是要转发的本地端口。那是您与 MySQL 客户端连接的端口。所以不是22
。
虽然您可以对端口进行硬编码3306
,但最好通过省略该参数让 SSH.NET 自动分配一个空闲的本地端口:
var portForwarded = new ForwardedPortLocal("127.0.0.1", "1.1.1.1", 3306);
然后ForwardedPortLocal.BoundPort
在您的连接字符串中使用,而不是硬编码3306
.
也可以看看:
推荐阅读
- angular - Angular SSR First Paint 在加载 styles.css 后出现
- android - HideBottomViewOnScrollBehavior 不适用于 recyclerview 项目展开/折叠
- javascript - 有没有办法从二进制内容中设置 img 或音频/视频的 src 属性
- git - 我正在使用 ASP .NET 核心和 git 存储库命令不起作用
- azure - 从 Azure Data Lake Gen2 数据存储创建 Azure ML 数据集时出现 AuthenticationException
- duplicates - 如何修复我的代码以避免在球拍中使用地图时返回重复的对?
- java - 安卓工作室。string.isBlank() 不存在
- elasticsearch - 如何在弹性搜索中求和内部命中分数?
- php - 如何在多个值中推送单个数组?
- reactjs - 反应选择可创建的默认输入值不起作用