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

如何用Python的sshtunnel实现指定SSH本地端口转发(含密钥文件)

使用Python sshtunnel库实现等价的本地端口转发

原OpenSSH命令的功能是通过RSA私钥认证,指定主机密钥算法为ssh-rsa,关闭严格主机密钥检查,建立本地端口到远程目标的转发,并后台运行不执行远程命令。以下是用sshtunnel库实现的等价代码:

from sshtunnel import SSHTunnelForwarder

# 替换为实际参数
KEY_FILE = "/path/to/your/rsa_private_key"
LOCAL_PORT = 8080  # 原命令中的<localPort>
REMOTE_HOST = "target.remote.host"  # 原命令中的<remoteHost>
REMOTE_PORT = 3306  # 原命令中的<remotePort>
SSH_USER = "your_username"  # 原命令中的<user>
SSH_SERVER_IP = "ssh.server.ip"  # 原命令中的<remoteServerIP>

# 建立隧道
with SSHTunnelForwarder(
    (SSH_SERVER_IP, 22),  # SSH服务器默认端口为22,若有修改请调整
    ssh_username=SSH_USER,
    ssh_pkey=KEY_FILE,  # 对应原命令的-i <keyfile>
    ssh_options={
        "HostKeyAlgorithms": "ssh-rsa",  # 对应原命令的-o HostKeyAlgorithms=ssh-rsa
        "StrictHostKeyChecking": "no"  # 对应原命令的-o StrictHostKeyChecking=no
    },
    local_bind_address=("127.0.0.1", LOCAL_PORT),  # 对应原命令的-L <localPort>:...
    remote_bind_address=(REMOTE_HOST, REMOTE_PORT),  # 对应原命令的...:<remoteHost>:<remotePort>
    daemon=True  # 对应原命令的-fN,后台运行隧道
) as tunnel:
    print(f"隧道已启动,本地端口 {LOCAL_PORT} 转发到 {REMOTE_HOST}:{REMOTE_PORT}")
    # 若需保持脚本前台运行,可取消以下注释
    # import time
    # while True:
    #     time.sleep(3600)

参数对应说明:

  • ssh_pkey=KEY_FILE:直接指定RSA私钥文件路径,等价于原命令的-i <keyfile>
  • ssh_options字典配置:完全对应原命令的-o参数,设置主机密钥算法和关闭严格主机密钥检查
  • local_bind_address + remote_bind_address:组合起来等价于原命令的-L <localPort>:<remoteHost>:<remotePort>
  • daemon=True:让隧道在后台运行,不阻塞当前进程,等价于原命令的-fN

如果不需要后台运行,可去掉daemon=True,此时脚本会阻塞直到隧道关闭。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:21:04