Python ssh 使用 Tor 代理

标签 python ssh paramiko tor

当我从 Python 脚本使用 ssh 时,我希望能够通过 Tor 发送数据。当我使用 OpenSSH 客户端手动通过 ssh 连接到主机时,Tor 可以正常工作。这是我的 ssh 配置文件。我使用 connect-proxy 和 ProxyCommand 通过 Tor 路由连接(同样,这通过标准的 OpenSSH 客户端工作正常):

host host
user user
hostname host.domain.com
CheckHostIP no
Compression yes
Protocol 2
ProxyCommand connect-proxy -S localhost:9050 %h %p

我有这个 Python 测试脚本:

import paraproxy
import paramiko

conf = paramiko.SSHConfig()
conf.parse(open('/home/user/.ssh/config'))
host = conf.lookup('host')
print host

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host["hostname"], username=host["user"], password='test')
client.close()

此脚本对主机执行 ssh,但是,它不使用 ssh 配置文件中的 ProxyCommand,因此它不会通过 Tor 路由流量。我尝试了几种不同的配置,但无法使其正常工作。关于如何使这项工作有任何想法吗?

最佳答案

您需要创建 ProxyCommand(一个类似套接字的对象)并将其传递给 client.connect()

import paramiko

conf = paramiko.SSHConfig()
conf.parse(open('/home/user/.ssh/config'))
host = conf.lookup('host')
print host

proxy = paramiko.ProxyCommand(host['proxycommand'])

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host["hostname"], username=host["user"], password='test', sock=proxy)
client.close()

Docs for connect() method .注意 timeout 参数。如果您正在执行一些自动化操作,那么指定它总是一个好主意。

关于Python ssh 使用 Tor 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17681031/

相关文章:

python - 如何按列对数据框进行分组并为每个组接收新列

ssh - 设置 SSH 连接超时

windows - 使用 vagrant ssh 时如何粘贴到 SourceTree 终端窗口

python - 如何使用 Python 库(例如 Paramiko)与 Telnet 和 SSH 进行链式连接

python - Paramiko:读取时管道 block 永远

python - Kivy 应用程序可以在 Windows 7 上运行,但不能在 ubuntu 上运行

python - 配置不正确 : Error importing module django. contrib.locale: "No module named locale"

python - Pandas dataframe 应用引用前一行来计算差异

java - 在远程服务器上运行多个命令

python - 尝试使用 Vyatta 的非标准命令时出现 Paramiko "Invalid command"