Как связать туннели SSH

Я пытаюсь настроить простую цепочку туннелей SSH.

У меня есть следующие машины:

  1. локальная машина по адресу 10.0.0.1.
  2. удаленная машина по адресу 10.0.0.2.

У меня есть следующие программы:

  1. клиент.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. сервер.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 и добавляю локальный туннель SSH с исходным портом 8000 и целевым 10.0.0.2:8001, и он работает, как и ожидалось.

  3. Я запускаю client.py (CLIENT_HOST='127.0.0.1', CLIENT_PORT=8001) на удаленной машине и server.py (SERVER_HOST='', SERVER_PORT=8002) на локальной машине. Затем я запускаю PuTTY и добавляю удаленный SSH-туннель с исходным портом 8001 и целевым 127.0.0.1:8002, и он работает, как и ожидалось.

  4. Однако, когда я запускаю client.py (CLIENT_HOST='127.0.0.1', CLIENT_PORT=8000) и server.py (SERVER_HOST='', SERVER_PORT=8002) на локальном компьютере и запускаю два PuTTY, один с локальным SSH туннель от исходного порта 8000 к целевому 10.0.0.2:8001 и один с удаленным туннелем SSH от исходного порта 8001 к целевому 127.0.0.1:8002, ничего не происходит.

Как я понимаю, сообщение от client.py должно быть отправлено на порт 8000 локальной машины, где PuTTY слушает и должно перенаправить его через SSH на порт 8001 удаленной машины, где PuTTY слушает и должен перенаправить его через SSH на локальный порт 8002 машины, откуда он должен добраться до server.py.

Что не так и как это исправить?

Спасибо.


person John Doe    schedule 17.04.2013    source источник


Ответы (1)


Возможно, вам нужно поставить галочку «Локальные порты принимают соединения с других хостов» и «Удаленные порты делают то же самое».

Кстати, netcat — более полезная стандартная утилита для опробования подобных вещей, если она доступна в вашей ОС.

person artbristol    schedule 18.04.2013