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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:25:48