shabelski89
@shabelski89
engineer

Local port forwarding with host jumping Python?

Добрый день!
Помогите разобраться как на python выполнить port forwarding через несколько хостов?
Схема: [localhost]-[hostA]-[hostB]..[hostN]-[dest_host]
CLI like:
ssh -t -gL 6000:localhost:6000 hostA ssh -t -gL 6000:localhost:6000 hostB ssh -t -gL 6000:dest_host:6000 hostN


Используя sshtunnel получается перейти на hostA , как открыть следующий туннель из этого туннеля?
Ниже тестовый код, переход на 1 хост, как перейти на следующий ?
from sshtunnel import SSHTunnelForwarder
import requests


with SSHTunnelForwarder(
         ('192.168.1.3', 22),
         ssh_password='password',
         ssh_username='username',
         local_bind_address=('127.0.0.1', 6000),
         remote_bind_address=('dest_host', 6000)  # or localhost если сервис тут же
    ) as server:
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0'}
    r = requests.get('http://127.0.0.1:6000', headers=headers).content
    print(r)


Не нашел рабочих примеров для sshtunnel и paramiko, в основном требуется туннель на удаленный хост и далее коннект к БД либо на localhost, либо на внешний адрес.
  • Вопрос задан
  • 366 просмотров
Пригласить эксперта
Ответы на вопрос 2
shabelski89
@shabelski89 Автор вопроса
engineer
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Пробрасывайте последовательно через все туннели, кроме последнего, не 6000 порт, а 22. Пследний туннель пробросит целевой порт. Все коннекты, начиная со второго, должны быть на localhost, а порты ssh придется биндить на разные локальные порты.

Смотрите, в CLI вы каждый раз на новой уделенной машине стартуете ssh. Технически можно делать это на одной машине, пришивая каждый раз 22 порт следующей удаленной машины на очередной локальный порт.

Сам не пробовал. пока некогда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы