Назад | Перейти на главную страницу

SSH-соединение через обратный (удаленный) SSH-туннель

У меня есть такая установка:

Я хочу иметь возможность подключаться к Linux, находящемуся за брандмауэром, издалека через ssh. Я читал о ssh-туннелировании, и мне пришло в голову, что это может быть моим решением. Мне удалось открыть удаленный туннель ssh между A и B. Но я не могу понять, как использовать этот туннель для управления A через ssh или даже возможно ли это. например: подключиться с моего ноутбука к A через B.

Это команда, как я понял, чтобы открыть туннель:

ssh -R 2022:localhost:22 user@serverB

(запросы через порт 2022 передаются на порт 22 (ssh) на целевой машине) через user @ serverB.

После того, как я открою этот туннель, какие действия должны быть для подключения через ssh к целевой машине?

Пожалуйста, поправьте меня, если я неправильно понимаю.

Вы имеете в виду "УДАЛЕННУЮ ПЕРЕСЫЛКУ SSH", и это правильно объяснено в "человек ssh", учитывая ""вариант.

> man ssh
[...]
 -R [bind_address:]port:host:hostport
    Specifies that the given port on the remote (server) host is to 
    be forwarded to the given host and port on the local side.
    This works by allocating a socket to listen to port on the remote 
    side, and whenever a connection is made to this port, the
    connection is forwarded over the secure channel, and a connection is 
    made to host port hostport from the local machine.
    [...]

В вашем контексте, где:

  • ящик Linux A (LINUX_BOX_A) внутри локальной сети за брандмауэром.
  • сервер Linux B (SERVER_B) с фиксированным IP-адресом, доступный из Интернета

Удаленную пересылку SSH можно использовать для доступа к LINUX_BOX_A из SERVER_B. Единственное условие: LINUX_BOX_A ДОЛЖЕН иметь возможность подключиться через SSH к SERVER_B.

Для достижения этой цели вам необходимо:

  1. на LINUX_BOX_A:

LINUX_BOX_A:~ $ ssh -R 2222:localhost:22 user@SERVER_B

это откроет ssh-соединение от LINUX_BOX_A к SERVER_B, которое будет использоваться для удаленного входящего соединения.

После того, как вышеупомянутое соединение ssh установлено, вы можете:

  1. на SERVER_B:

SERVER_B:~ $ ssh -p 2222 user@localhost

такое ssh-соединение, запущенное на SERVER_B, будет направлено на порт 2222, который прослушивает localhost, который ... привязан к предыдущему ssh-соединению. Таким образом, это будет «соединение ssh внутри другого соединения ssh».

Некоторые дополнительные примечания:

  • учтите, что если первое ssh-соединение истечет по таймауту и ​​/ или упадет по какой-либо причине (в том числе: отключено локальным брандмауэром из-за бездействия), вы не сможете выполнить удаленную пересылку / remotely_connect;

  • так как важно оставить первое соединение ssh активным на очень долгое время, вы можете найти полезным запустить такое ssh в "экран"сессия

Последнее замечание: очевидно, что все вышеперечисленное имеет некоторые (потенциально серьезные) последствия для безопасности, которые выходят за рамки этого ответа.

Если вы управляете брандмауэром, вы можете использовать на нем переадресацию портов, чтобы избежать использования обратного ssh (он будет более стабильным).