使用Tor代理的Python ssh

7 python ssh tor paramiko

当我从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
Run Code Online (Sandbox Code Playgroud)

我有这个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()
Run Code Online (Sandbox Code Playgroud)

此脚本执行ssh到主机,但它不在ssh配置文件中使用ProxyCommand,因此它不通过Tor路由流量.我尝试了一些不同的配置,但我无法使其工作.关于如何使这项工作的任何想法?

twi*_*wil 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()
Run Code Online (Sandbox Code Playgroud)

connect()方法的文件.注意timeout参数.如果你正在做一些自动化,那么指定它总是一个好主意.