使用Tor代理的Python ssh

时间:2013-07-16 15:40:45

标签: 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路由流量。我尝试了一些不同的配置,但我无法使其工作。关于如何使这项工作的任何想法?

1 个答案:

答案 0 :(得分:13)

您需要创建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参数。如果你正在做一些自动化,那么指定它总是一个好主意。