2012-07-02 170 views
19

我想从一个使用paramiko的python应用程序做一些端口转发。我可以设置SSH连接,但我有点难以理解如何使用paramiko.transport。我已经找到了this file,但我无法弄清楚发生了什么。从看paramiko.Transport docs,似乎只使用open_channel函数的一行,但我无法解决如何实现。我试图复制一个简单的ssh -L 8000:localhost:8000。与paramiko端口转发

任何人都可以帮我吗?

+2

所以,我已经成功地得到一点点进一步与这一点,并认为我可能会吠叫错误的树。我已经研究了如何通过调用open_channel命令来调用open_channel命令,但是当我尝试打开一个直接或转发的tcpip连接时,我得到了服务器的Administratively禁止,这对于-L端口从正常的SSH会话转发。有任何想法吗? – TimD

+1

你可以发表你的代码/你正在使用的一段代码吗? –

回答

14

请找使用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站点使用ssh服务器在Red Hat下进行了测试,并指向第三台服务器。 (我使用Python 2.7.2

希望它能帮助,

+2

“forward.py”链接已损坏。请看这一个:https://github.com/paramiko/paramiko/blob/master/demos/forward.py – alanjds

7

您可以使用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) 
+0

看起来像代码示例中的缩进是不正确的...? – Petri

+0

缩进不正确,编辑和修复。 – datashaman

+1

此软件包不会执行远程端口转发,只能在本地进行。 – datashaman