如何用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
相关产品推荐
相关产品推荐

