2012-07-02 26 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