У меня есть такая установка:
ящик Linux A внутри локальной сети за брандмауэром.
сервер Linux с фиксированным IP-адресом, доступный из Интернета.
Я хочу иметь возможность подключаться к 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.
[...]
В вашем контексте, где:
Удаленную пересылку SSH можно использовать для доступа к LINUX_BOX_A из SERVER_B. Единственное условие: LINUX_BOX_A ДОЛЖЕН иметь возможность подключиться через SSH к SERVER_B.
Для достижения этой цели вам необходимо:
LINUX_BOX_A:~ $ ssh -R 2222:localhost:22 user@SERVER_B
это откроет ssh-соединение от LINUX_BOX_A к SERVER_B, которое будет использоваться для удаленного входящего соединения.
После того, как вышеупомянутое соединение ssh установлено, вы можете:
SERVER_B:~ $ ssh -p 2222 user@localhost
такое ssh-соединение, запущенное на SERVER_B, будет направлено на порт 2222, который прослушивает localhost, который ... привязан к предыдущему ssh-соединению. Таким образом, это будет «соединение ssh внутри другого соединения ssh».
Некоторые дополнительные примечания:
учтите, что если первое ssh-соединение истечет по таймауту и / или упадет по какой-либо причине (в том числе: отключено локальным брандмауэром из-за бездействия), вы не сможете выполнить удаленную пересылку / remotely_connect;
так как важно оставить первое соединение ssh активным на очень долгое время, вы можете найти полезным запустить такое ssh в "экран"сессия
Последнее замечание: очевидно, что все вышеперечисленное имеет некоторые (потенциально серьезные) последствия для безопасности, которые выходят за рамки этого ответа.
Если вы управляете брандмауэром, вы можете использовать на нем переадресацию портов, чтобы избежать использования обратного ssh (он будет более стабильным).