24

Paramikoを使用してPythonアプリからポートフォワーディングを実行しようとしています。SSH接続は問題なくセットアップできますが、使用方法について少し困惑していますparamiko.Transport。私はすでにこのファイルを見つけましたが、何が起こっているのか理解できません。paramiko.Transportドキュメントを見ると、関数を使用しているのは1行のようですが、それopen_channelを実装する方法がわかりません。単純なを複製しようとしていssh -L 8000:localhost:8000ます。

誰かが私を助けることができますか?

4

2 に答える 2

19

paramiko-1.7.7.1を使用しているコードと、 115 行目から最後までコードを削除しpycrypto-2.6forward.py スクリプトを見つけてください(オプションの解析を避けるため)。

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 番目のサーバーを指定して、Windows ステーションから正常にテストしました。(私は使用していPython 2.7.2ます)

それが役に立てば幸い、

于 2012-08-24T09:12:39.440 に答える
8

https://github.com/pahaz/sshtunnelを使用できます

pip install sshtunnel

コード例:

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)
于 2014-09-25T17:32:39.340 に答える