2013-07-16 4 views
7

Python 스크립트에서 ssh를 사용할 때 Tor를 통해 데이터를 보내고 싶습니다. Tor는 OpenSSH 클라이언트를 사용하여 수동으로 호스트에 ssh를 연결하면 예상대로 작동합니다. 이것은 나의 ssh 설정 파일이다.Tor 프록시를 사용하는 Python ssh

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() 

이 스크립트가 수행 :이 파이썬 테스트 스크립트를

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

: 나는 연결 프록시 ProxyCommand과 경로에 토르를 통해 연결 (다시,이 표준에서 OpenSSH 클라이언트를 통해 잘 작동)를 사용 ssh를 호스트로 보내지 만 ssh 설정 파일에서 ProxyCommand를 사용하지 않으므로 Tor를 통해 트래픽을 라우팅하지 않습니다. 몇 가지 구성을 시도했지만 작동하도록 만들 수는 없습니다. 이 작품을 만드는 방법에 대한 아이디어가 있습니까?

답변

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 매개 변수. 자동화를하고 있다면 항상 지정하는 것이 좋습니다.

+0

실제로 코드를 실행 해 보셨습니까? 당신이 그것을 시도했을 때 작동 했습니까? –

+0

예. 하지만 ssh를 통해 poxying했다 :'ProxyCommand ssh [email protected] nc % h % p' – twil

+0

이것은 작동한다. 나는 paraproxy를 사용하지 않는 것에 관한 부분을 놓쳤다. 가져온 것과 작동하지 않습니다. 나는 너를 업 그레하려고했지만 우연히 너를 떨어 뜨렸다. 그러나 나는이 대답을 받아 들인다. 고맙습니다. –

관련 문제