使用paramiko进行端口转发

Tim*_*imD 21 python ssh paramiko

我正在尝试使用paramiko从python应用程序进行一些端口转发.我可以很好地设置SSH连接,但我对如何使用paramiko.transport感到有点难过.我已经找到了这个文件,但我无法弄清楚它里面发生了什么.从查看paramiko.Transport 文档,似乎单行使用open_channel函数,但我无法弄清楚如何实现它.我正在尝试复制一个简单的ssh -L 8000:localhost:8000.

谁能帮我吗?

Y__*_*Y__ 17

请查找一些使用的代码paramiko-1.7.7.1,pycrypto-2.6以及我从中将代码从第115行删除到最后的forward.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)
Run Code Online (Sandbox Code Playgroud)

我已经在Windows工作站上成功测试了它,使用Red Hat下的ssh服务器并指向第三台服务器.(我正在使用Python 2.7.2)

希望能帮助到你,

  • `forward.py`链接被破坏了.请看这一个:https://github.com/paramiko/paramiko/blob/master/demos/forward.py (3认同)

pah*_*haz 7

您可以使用https://github.com/pahaz/sshtunnel

pip install sshtunnel
Run Code Online (Sandbox Code Playgroud)

代码示例:

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)
Run Code Online (Sandbox Code Playgroud)

  • 这个包不做远程端口转发,只做本地。 (3认同)