如何在C#中通过中间跳转服务器构建远程SQL Server连接字符串
C# 通过跳转服务器连接远程SQL Server实现方案
核心逻辑是先建立本地到跳转服务器的端口转发链路,将本地指定端口的流量转发到目标SQL Server的服务端口,C#程序直接访问本地转发端口即可完成连接,无需额外修改SQL访问逻辑。
方案1:手动配置RDP端口映射(适合开发调试场景)
无需修改代码,仅需提前配置RDP连接参数即可:
- 打开Windows远程桌面连接工具,点击「显示选项」→ 切换到「本地资源」标签页 → 点击底部「本地设备和资源」区域的「更多」按钮 → 勾选「端口」后点击「添加」
- 本地端口填写未被占用的端口,例如
14330,远程地址填写目标SQL Server的地址+端口,例如192.168.1.100:1433 - 保持VPN连接、RDP跳转服务器连接处于活跃状态,此时C#的SQL连接字符串直接配置为:
Data Source=localhost,14330;Initial Catalog=你的数据库名;User ID=SQL登录账号;Password=SQL登录密码;
即可正常访问目标SQL Server。
方案2:代码集成SSH隧道(适合生产/自动化运行场景)
如果跳转服务器开启了SSH服务(Windows Server也可内置OpenSSH服务端),可以直接在C#代码中自动建立转发链路,无需手动维护RDP连接:
- 首先在VS的NuGet包管理器中安装依赖包
SSH.NET - 参考示例代码实现:
using Renci.SshNet; using System.Data.SqlClient; // 配置参数 const string JumpServerIp = "跳转服务器公网/ VPN内IP"; const int JumpSshPort = 22; const string JumpSshAccount = "跳转服务器SSH登录账号"; const string JumpSshPassword = "跳转服务器SSH登录密码"; const string TargetSqlIp = "目标SQL Server在跳转服务器内网的IP"; const int TargetSqlPort = 1433; const int LocalForwardPort = 14330; // 建立SSH连接 using var sshClient = new SshClient(JumpServerIp, JumpSshPort, JumpSshAccount, JumpSshPassword); sshClient.Connect(); if (sshClient.IsConnected) { // 启动本地端口转发 var forwardedPort = new ForwardedPortLocal("127.0.0.1", (uint)LocalForwardPort, TargetSqlIp, (uint)TargetSqlPort); sshClient.AddForwardedPort(forwardedPort); forwardedPort.Start(); // 正常访问SQL Server var connectionString = @$"Data Source=localhost,{LocalForwardPort}; Initial Catalog=你的数据库名称; User ID=SQL登录账号; Password=SQL登录密码; Connect Timeout=30;"; using var sqlConnection = new SqlConnection(connectionString); sqlConnection.Open(); // 此处编写你的SQL业务逻辑 Console.WriteLine("数据库连接成功"); // 程序退出前释放资源 forwardedPort.Stop(); } sshClient.Disconnect();
注意事项
- 两种方案均需要先保持VPN连接正常
- 本地转发端口需确认未被其他程序占用
- 如果跳转服务器不支持SSH,也可通过调用系统命令自动启动带端口映射的RDP连接实现链路自动建立,适配Windows跳转服务器场景
内容的提问来源于stack exchange,提问作者AutomationQA
相关产品推荐
相关产品推荐

