SSH命令手动执行正常,但Python脚本调用异常问题求助
解决Tor中转环境下Python脚本中SSH命令失效的问题
你的Tor反向监听链路逻辑已经跑通了,唯独脚本里的SSH命令卡壳,这十有八九是全局Tor代理干扰了SSH的执行逻辑——毕竟你提到中转服务器配置了所有TCP和DNS流量走Tor,这里给你几个针对性的排查和解决思路:
1. 临时绕过Tor代理执行SSH
如果中转服务器用了系统级Tor代理(比如通过torify、torsocks或者环境变量配置了全局SOCKS代理),那么SSH命令会被强制走Tor网络,但你要连接的目标(比如中转服务器本身的IP)可能是内网地址,或者Tor网络无法直接访问,这就会导致连接失败。
解决办法很简单,在执行SSH命令前清空代理环境变量:
unset http_proxy https_proxy ALL_PROXY all_proxy && ssh user@your中转服务器IP
要是你用torsocks做全局代理,还可以直接加参数跳过代理:
torsocks --ignore-proxy ssh user@your中转服务器IP
2. 给SSH配置添加代理例外
检查你的SSH配置文件(系统级的/etc/ssh/ssh_config或者用户目录的~/.ssh/config),看看有没有被全局代理配置影响——比如有人可能为了让所有SSH连接走Tor,加了ProxyCommand指向Tor的SOCKS端口。
如果是这种情况,你可以针对要连接的中转服务器IP单独设置例外:
Host your中转服务器IP ProxyCommand none NoProxy yes
3. 在Python脚本中隔离SSH的执行环境
如果你的脚本用subprocess调用SSH,要确保它不继承系统的代理环境变量。可以在调用时传入清理后的环境:
import os import subprocess # 过滤掉所有代理相关的环境变量 clean_env = { key: value for key, value in os.environ.items() if not key.lower().endswith("_proxy") } # 执行SSH命令,比如创建转发端口 ssh_cmd = ["ssh", "user@your中转服务器IP", "socat TCP-LISTEN:8080,fork SOCKS4A:127.0.0.1:your-onion-address.onion:443,socksport=9050"] result = subprocess.run(ssh_cmd, env=clean_env, capture_output=True, text=True) # 输出执行结果用于调试 if result.returncode != 0: print(f"SSH执行出错: {result.stderr}") else: print(f"转发端口创建成功: {result.stdout}")
4. 排除中转服务器本地SSH服务的问题
最后可以做个基础验证:直接在中转服务器本地执行ssh localhost或者连接其他测试地址,确认SSH服务本身没有问题;同时用netstat -tulpn检查监听端口是否正常绑定,排除端口被Tor路由独占的情况。
先从这几点入手排查,应该能快速定位并解决SSH命令失效的问题。
内容的提问来源于stack exchange,提问作者Brad
相关产品推荐
相关产品推荐

