Это команда для оранжевого компьютера:
ssh -N -R:<chosen-port>:10.0.0.101:<web-app-port> -p <blue-ssh-port> <blue-user>@<blue-public-ip>
(Как заставить его пережить свой выход из оранжевого - это отдельная проблема. Увидеть это ; или tmux
/screen
, disown
или nohup
с пользовательским скриптом.)
Приведенная выше команда заставляет SSH-сервер на синем прослушивать выбранный (TCP) <chosen-port>
по интерфейсу обратной связи. Входящие соединения будут туннелированы на оранжевый и отправлены на 10.0.0.101:<web-app-port>
(т.е. красный) оттуда. Это создает туннель без выполнения команды или оболочки на синем (благодаря опции -N
).
Есть способ заставить синий слушать на другом (не шлейфовом) интерфейсе, но это не рекомендуется из-за безопасности; эта опция может даже быть отключена на синем (объяснено в man ssh
, опция -R
).
Чтобы добраться до синего интерфейса обратной связи с вашего зеленого домашнего компьютера, используйте другой туннель. По зеленому:
ssh -N -L:<chosen-port-2>:127.0.0.1:<chosen-port> -p <blue-ssh-port> <blue-user>@<blue-public-ip>
Теперь вы должны быть в состоянии добраться до красного с зеленого по адресу:
127.0.0.1:<chosen-port-2>
<chosen-port>
и <chosen-port-2>
могут совпадать или не совпадать, это действительно не имеет значения. Важно то, что вы должны выбирать высокие порты (от 1024 до 65535).
Разница между туннелями -L
и -R
:
-L
слушает на локальной стороне, т.е. там, где вы вызываете ssh
;
-R
слушает на удаленной стороне, т. Е. Где вы ssh
.
Зная это, вы сможете проследить, что мы только что сделали. Обратите внимание, что мы создали туннели, движущиеся в сторону зеленого, потому что (для меня) это казалось более логичным, чтобы работать таким образом. Ваше соединение будет идти с зеленого цвета, поэтому давайте проследим весь маршрут в этом направлении. Это выглядит следующим образом:
- Клиент SSH на зеленом слушает
127.0.0.1:<chosen-port-2>
из-за второго туннеля.
- Он пересылает пакеты на SSH-сервер синего цвета, который отправляет их на номер
127.0.0.1:<chosen-port>
. С голубой точки зрения это локальные пакеты, генерируемые сервером SSH.
- Тот же сервер SSH прослушивает этот порт из-за первого туннеля. Сервер захватывает пакеты и перенаправляет их на оранжевый .
- Клиент SSH на оранжевом отправляет пакеты на красный . С красной точки зрения пакеты от оранжевого, он ничего не знает ни о синем, ни о зеленом .