You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过SSH隧道连接MS SQL Server时连接失败问题求助

SSH隧道连接公司内网MS SQL Server连接失败解决方案

核心问题定位

当前连接失败发生在SSH跳板机登录阶段,尚未进入隧道转发、SQL连接的流程,你看到的Could not receive SSH config file、0 Keys loaded from agent、0 keys loaded属于正常日志提示:SSHTunnelForwarder默认会优先读取本地SSH配置文件、ssh-agent存储的密钥进行登录,未找到密钥时自动切换到密码登录,上述日志并非报错根源。

排查修复步骤

1. 手动验证SSH跳板机连通性

先跳过代码,直接用终端/第三方SSH工具(如Xshell、FinalShell)执行SSH登录命令,验证基础信息是否正确:
ssh <SSH用户名>@<跳板机公网IP> -p <SSH端口>
输入密码后如果无法登录,优先排查以下问题:

  • 跳板机IP、SSH端口(默认22,多数企业会修改为自定义端口)、用户名、密码是否填写正确
  • 当前使用的网络是否有权限访问跳板机,部分企业需要接入办公内网、开启网络准入权限后才可访问跳板机
  • 你的账号是否拥有SSH登录跳板机的权限、账号是否处于有效期

2. 修正SSHTunnelForwarder参数配置

绝大多数报错是由于第一个参数填写错误导致,注意第一个参数为跳板机的公网IP/域名,不是localhost,正确配置参考:

from sshtunnel import SSHTunnelForwarder

# 初始化SSH隧道
ssh_tunnel = SSHTunnelForwarder(
    # 跳板机连接信息,替换为实际值
    ("跳板机公网IP", 跳板机SSH端口),
    ssh_username="你的跳板机用户名",
    ssh_password="你的跳板机登录密码",
    # 远端要访问的SQL Server内网地址,默认端口1433
    remote_bind_address=("SQL Server内网IP", 1433),
    # 可选,指定本地绑定的端口,不填则默认随机分配
    local_bind_address=("127.0.0.1", 14330)
)

# 启动隧道
ssh_tunnel.start()
# 打印本地绑定端口,未指定local_bind_address时用这个值连接SQL
print(ssh_tunnel.local_bind_port)

3. 连接MS SQL Server

隧道启动成功后,SQL连接配置填写如下:

  • 服务器地址:127.0.0.1
  • 端口:你配置的本地端口(如上面的14330,或打印出的ssh_tunnel.local_bind_port值)
  • 用户名、密码:MS SQL Server本身的账号密码,和跳板机账号无关

其他常见问题排查

  • 若手动SSH可登录,代码仍报错,检查密码中的特殊字符是否在Python字符串中正确转义,可使用raw字符串(r"密码")避免转义问题
  • 若企业跳板机需要MFA二次认证,密码登录方式不支持,需要配置SSH密钥登录:将你本地的SSH公钥添加到跳板机的~/.ssh/authorized_keys文件中即可
  • 确认跳板机本身有权限访问内网SQL Server,可登录跳板机后执行telnet SQL内网IP 1433验证连通性

内容的提问来源于stack exchange,提问作者Governor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:54:04