当我从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路由流量。我尝试了一些不同的配置,但我无法使其工作。关于如何使这项工作的任何想法?
答案 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
参数。如果你正在做一些自动化,那么指定它总是一个好主意。