端口转发的paramiko端口转发的paramiko(Port forwarding with pa

2019-06-14 12:01发布

我试图做使用的paramiko Python应用程序的一些端口转发。 我可以设置SSH连接得很好,但我有点难倒如何使用paramiko.transport。 我已经发现了这个文件 ,但我不知道是什么回事在里面。 从看paramiko.Transport 文档 ,似乎在单线上的open_channel功能,但我不能工作了如何实现这一点。 我试图复制一个简单的ssh -L 8000:本地主机:8000。

谁能帮我吗?

Answer 1:

使用请找一些代码paramiko-1.7.7.1pycrypto-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)

我从一个Windows站成功地测试它,使用红帽一个SSH服务器,并指向第三服务器。 (我使用Python 2.7.2

希望能帮助到你,



Answer 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)


文章来源: Port forwarding with paramiko