Строительство SSH туннеля - PullRequest
0 голосов
/ 09 января 2019

У меня три хоста: A, B, C. B может подключаться к C через ssh через порт 221. A не может подключиться к C, поскольку он находится за маршрутизатором, но может подключаться к B через ssh. Что мне нужно, это подключиться от A до C.

Ситуация обобщена ниже:

A -- p22 ---> B ОК

B -- p221---> C ОК

A -- p???---> C не работает

Я пробовал много вариантов ssh туннелирования, но похоже, что я не понимаю, как работает туннелирование. Кроме того, у меня нет привилегий root ни на одном из хостов, поэтому я не могу сделать переадресацию портов на порт 22. Поэтому я не уверен, что это туннелирование вообще возможно. Однако, если это возможно, я был бы признателен за точные команды, выполняемые на каждом хосте, чтобы я мог, наконец, выполнить ssh от A до C.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Хотя вы можете настроить явный туннель в этой ситуации, гораздо удобнее использовать параметр -J

ssh -J B -p 221 C

или опция ProxyJump явно

ssh -o ProxyJump=B -p 221 C

ssh сначала подключится к B для вас (при необходимости запрашивая пароль), затем подключится к C с B. С вашей точки зрения, вы будете подключены напрямую к C.

0 голосов
/ 09 января 2019

Идея ssh -L local_port:another_host:destination_port user@host состоит в том, чтобы сказать / начать прослушивание локально на local_port b / подключиться к удаленному host (как обычно), и, как только вы там, подключитесь к этим another_host и с / пересылать все, что вы получите локально, на этот хост другого destination_port

Итак, я бы попробовал следующее (с хоста A)

ssh -C -N -L 2222:C:221 user@B

затем с другого терминала

ssh -p 2222 user@localhost 

Я не проверял выше. Рад копать глубже, если требуется.

Вот объяснение, понятное человеку (надеюсь):

  • начиная с хоста A

  • ssh, подключитесь как user на хосте B (по умолчанию не указан порт 22)

  • -C сжать все содержимое в пути в туннеле
  • -N говорит, что не нужно открывать tty (интерактивный) сеанс на хосте B
  • -L говорит "как только вы на B, начните слушать на этом хосте (A) на порту 2222 (поскольку вы не root) и перенаправьте все на C, порт 221"

Если вы используете аутентификацию по паролю, она должна работать. Аутентификация сертификата потребовала бы немного дополнительной настройки на B для правильной пересылки вашего сертификата на C (точный синтаксис которого я сейчас не помню)

...