【问题标题】:Port forwarding with Paramiko使用 Paramiko 进行端口转发
【发布时间】:2012-07-02 22:34:55
【问题描述】:

我正在尝试使用 Paramiko 从 python 应用程序进行一些端口转发。我可以很好地设置 SSH 连接,但我对如何使用 paramiko.Transport 有点困惑。我已经找到this file,但我无法弄清楚其中发生了什么。从paramiko.Transport docs 看来,似乎只有一行使用open_channel 函数,但我不知道如何实现它。我正在尝试复制一个简单的ssh -L 8000:localhost:8000

谁能帮帮我?

【问题讨论】:

  • 所以我已经设法进一步了解了这一点,并认为我可能是找错了树。我已经弄清楚了如何通过在原始连接上调用 get_transport() 来操作 open_channel 命令,但是当我尝试使用它打开直接或转发的 tcpip 连接时,我会从服务器获得行政禁止,这很好-L 从正常的 SSH 会话转发端口。有什么想法吗?
  • 您能否发布您的代码/您正在使用的代码的一部分?

标签: python ssh paramiko


【解决方案1】:

请使用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)

我已经从 Windows 站成功测试了它,使用 Red Hat 下的 ssh 服务器并指向第三台服务器。 (我用的是Python 2.7.2

希望对你有帮助,

【讨论】:

【解决方案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)

【讨论】:

  • 看起来代码示例中的缩进不正确...?
  • 这个包不做远程端口转发,只做本地。
猜你喜欢
  • 2017-01-22
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多