2012-07-02 24 views
19

私はparamikoを使用しているPythonアプリケーションからポート転送をしようとしています。私はSSH接続をうまくセットアップすることができますが、paramiko.transportの使い方はちょっと分かりません。私はすでにthis fileを見つけましたが、何が起こっているのか分かりません。 paramiko.Transport docsを見ると、open_channel関数を使って1行になっているようですが、実装する方法はわかりません。私は単純なssh -L 8000:localhost:8000を複製しようとしています。paramikoによるポート転送

誰でもお手伝いできますか?

+2

だから私はもう少しで得ることができました:

あなたはhttps://github.com/pahaz/sshtunnel

pip install sshtunnel 

コード例を使用することができます

TimD

+1

あなたのコード/使用しているコードのセクションを投稿してください。 –

答えて

14

paramiko-1.7.7.1pycrypto-2.6forward.py scriptを使用してコードを検索してください(オプションの解析を避けるために、最後の行115からコードを削除しました)。

import paramiko, sys 
from forward import forward_tunnel 

remote_host = "target_host" 
remote_port = 8000 
local_port = 8000 
ssh_host = "my_ssh_host" 
ssh_port = 22 

user  = "login" 
password = "s3cr3t" 

transport = paramiko.Transport((ssh_host, ssh_port)) 

# Command for paramiko-1.7.7.1 
transport.connect(hostkey = None, 
        username = user, 
        password = password, 
        pkey  = None) 

try: 
    forward_tunnel(local_port, remote_host, remote_port, transport) 
except KeyboardInterrupt: 
    print 'Port forwarding stopped.' 
    sys.exit(0) 

Red Hatの下のsshサーバーを使用し、3番目のサーバーを指すsshサーバーを使用してWindowsステーションから正常にテストしました。

import sshtunnel 

with sshtunnel.open(
    (ssh_host, ssh_port), 
    ssh_host_key=None, 
    ssh_username=ssh_user, 
    ssh_password=ssh_password, 
    ssh_private_key=None, 
    remote_bind_address=(REMOTE_HOST, REMOTE_PORT)) as server: 

    def do_something(port): 
     # Do something with port 
     pass 

    print("LOCAL PORT:", server.local_bind_port) 

    do_something(server.local_bind_port) 
+2

'forward.py'リンクが壊れています。これを参照してください:https://github.com/paramiko/paramiko/blob/master/demos/forward.py – alanjds

7

、それが役に立てば幸い

(私は Python 2.7.2を使用しています)おそらく、私は間違った木を吠えていると思う。私はorigninal接続でget_transport()を呼び出すことによってopen_channelコマンドを操作する方法を研究しましたが、直接または転送されたtcpip接続を開こうとすると、管理上禁止されています。 -L通常のSSHセッションからポートを前方に移動します。何か案は?
+0

コードのインデントのように見える例が間違っていますか? – Petri

+0

インデントが正しくない、編集された、修正された。 – datashaman

+1

このパッケージはリモートポート転送を行いません。ローカルのみです。 – datashaman

関連する問題