2013-04-17 161 views
0

我想設置一個簡單的SSH隧道鏈。如何鏈接SSH隧道

我有以下的機器:

  1. 本地機器,在10.0.0.1。
  2. 遠程機器,在10.0.0.2。

我有以下程序:

  1. client.py:

    import socket 
    
    CLIENT_HOST = [...] 
    CLIENT_PORT = [...] 
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    sock.connect((CLIENT_HOST, CLIENT_PORT)) 
    sock.send('test') 
    sock.close() 
    
  2. server.py:

    import socket 
    
    SERVER_HOST = [...] 
    SERVER_PORT = [...] 
    
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    server.bind((SERVER_HOST, SERVER_PORT)) 
    server.listen(1) 
    client = server.accept()[0] 
    print client.recv(1024) 
    client.close() 
    server.close() 
    

現在:

  1. 我跑client.py(CLIENT_HOST = '127.0.0.1',CLIENT_PORT = 8000)和server.py(SERVER_HOST = '',SERVER_PORT = 8000)在同一臺機器上,它按預期工作。

  2. 我在本地機器上運行client.py(CLIENT_HOST ='127.0.0.1',CLIENT_PORT = 8000),在遠程機器上運行server.py(SERVER_HOST ='',SERVER_PORT = 8001)。然後,我運行PuTTY並添加源端口8000和目的地10.0.0.2:8001的本地SSH通道,並按預期工作。

  3. 我在遠程計算機上運行client.py(CLIENT_HOST ='127.0.0.1',CLIENT_PORT = 8001),在本地計算機上運行server.py(SERVER_HOST ='',SERVER_PORT = 8002)。然後,我運行PuTTY並添加源端口8001和目標127.0.0.1:8002的遠程SSH隧道,並按預期工作。但是,當我在本地計算機上運行client.py(CLIENT_HOST ='127.0.0.1',CLIENT_PORT = 8000)和server.py(SERVER_HOST ='',SERVER_PORT = 8002)並運行兩個PuTTY時,一個使用從源端口8000到目的地10.0.0.2:8001的本地SSH隧道,另一個使用從源端口8001到目的地127.0.0.1:8002的遠程SSH隧道,沒有任何反應。

在我看來,從client.py應該將消息發送到本地機器上的8000端口,其中膩子監聽,並應通過SSH重定向到遠程機器的端口8001,其中膩子監聽和應通過SSH將其重定向到本地機器的端口8002,它應該到達server.py。

什麼是錯,我該如何解決?

謝謝。

回答

0

您可能需要勾選「本地端口接受來自其他主機的連接」和「遠程端口執行相同的操作」。

順便說一下,netcat是一個更實用的標準工具,用於嘗試這種事情,如果它在您的操作系統上可用。