2013-04-17 162 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是一个更实用的标准工具,用于尝试这种事情,如果它在您的操作系统上可用。