Paramikoを使用してpythonアプリからポートフォワーディングを実行しようとしています。SSH接続は問題なくセットアップできますが、paramiko.Transport
の使用方法に少し困惑しています。I 'すでに このファイル を見つけましたが、何が起こっているのかわかりません。 paramiko.Transport
docs を見ると、open_channel
を使用した1行のようです。関数ですが、それを実装する方法がわかりません。単純なssh -L 8000:localhost:8000
を複製しようとしています。
誰かが私を助けることができますか?
paramiko-1.7.7.1
、pycrypto-2.6
、および forward.pyスクリプト を使用してコードを見つけてください。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番目のサーバーをポイントして、Windowsステーションから正常にテストしました。 (私はPython 2.7.2
を使用しています)
それが役に立てば幸い、
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)