Задать вопрос
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, либо на внешний адрес.
  • Вопрос задан
  • 483 просмотра
Подписаться 1 Сложный Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Python-разработчик
    9 месяцев
    Далее
  • SF Education
    Бэкенд-разработчик на Python
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 2
shabelski89
@shabelski89 Автор вопроса
engineer
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Пробрасывайте последовательно через все туннели, кроме последнего, не 6000 порт, а 22. Пследний туннель пробросит целевой порт. Все коннекты, начиная со второго, должны быть на localhost, а порты ssh придется биндить на разные локальные порты.

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

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

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

Похожие вопросы