2017-10-28 53 views
0

私はparamikoを使ってpythonでproxyコマンドを使いたいです。paramikoを使ってPythonスクリプトでsftp proxyコマンドを与えるには?

proxyコマンド:

sftp -o "ProxyCommand /usr/bin/nc --proxy proxy.somegateway.com:8080 %h %p" 

が、私はこれを直接使用する場合、私はSFTPサーバを接続することができています。

が、私はPythonスクリプトでこのプロキシコマンドを使用したい場合、私は以下の問題が出ます:

私のスクリプトを:

>>> import paramiko 
>>> cmd = '/usr/bin/ssh proxy.somegateway.com:8080' 
>>> proxy = paramiko.ProxyCommand(cmd) 
>>> proxy 
<paramiko.proxy.ProxyCommand object at 0x23b3bd0> 
>>> client = paramiko.SSHClient() 
>>> client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
>>> client.connect(hostname='some.host.com', username='myuser', password='secretpassword', sock=proxy) 
No handlers could be found for logger "paramiko.transport" 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 366, in connect 
    t.start_client(timeout=timeout) 
    File "/usr/lib/python2.7/site-packages/paramiko/transport.py", line 510, in start_client 
    raise e 
paramiko.ssh_exception.ProxyCommandFailure: ('/usr/bin/ssh proxy.somegateway.com:8080', 'Broken pipe') 

私はProxyCommandFailure問題を取得しています。

+6

あなたの投稿を誹謗中傷しないでください。 Stack Exchangeネットワーク上に掲載することで、SEがそのコンテンツを配布する権利(CC BY-SA 3.0ライセンス)(https://creativecommons.org/licenses/by-sa/3.0 /))。 SEのポリシーによって、どんな破壊行為も元に戻されます。この投稿とあなたのアカウントとの関連付けを解除する場合は、[解約リクエストの正しいルートは何ですか?](https://meta.stackoverflow.com/q/323395) – adiga

答えて

1

それはこのようにする必要があります:

target_host = 'sftp.foo.com' 
target_port = 22 
proxy = paramiko.proxy.ProxyCommand(
    '/usr/bin/nc --proxy proxy.bar.com:8080 %s %d' \ 
    % (target_host, target_port)) 
client.connect(hostname=target_host, port=target_port, password='...', sock=proxy) 
#                  ^^^^^^^^^^ 

はparamikoのdoc詳細については、を参照してください。

+0

こんにちはpynexj、 お返事ありがとうございます。今接続していますが、lsコマンドを実行しようとすると、「このサービスはsftp接続のみを許可します」というメッセージが表示されます。 実行コマンドがある: –

+0

(STDIN、STDOUT、標準エラー)= client.exec_command( "LS")を stdout.readlines()の行のためのリモートSSHサーバのみ許可エラーメッセージに基づいて プリント(ライン) –

+0

SFTPでexec_command()を呼び出すことはできません。これを手作業でsshして確認することができます。 – pynexj

関連する問題