инициировать SSH-соединение с сервера на клиент

10

Мы можем легко подключиться sshк удаленной машине, имеющей публичный IP.

Но теперь у меня есть удаленный компьютер без общедоступного IP-адреса, и мне нужно подключиться к нему со своего компьютера, который имеет общедоступный IP-адрес. Так что удаленная машина должна инициировать это соединение (добавить клиента).

Мне это нужно, потому что мой дедушка работает на компьютере без публичного IP, и ему иногда нужна помощь с системой.

В аналогичной ситуации в Windows я использовал VNC-соединение (от TightVNC), на сервере TightVNC есть опция «Добавить клиента»: пользователь только что ввел IP-адрес клиента (т.е. мой публичный IP-адрес), мой клиент уже находится в «режиме прослушивания», и когда «сервер» добавляет клиента, соединение инициализируется.

Итак, возможно ли выполнить такой же трюк с SSH-соединением?

Дмитрий Франк
источник

Ответы:

12

По определению, клиент является тем, кто инициирует соединение.

Для вашей проблемы, я думаю, что простым решением было бы создание обратного туннеля.

На компьютере без публичного IP:

ssh -R 2222:localhost:22 loginOfServerWithPublicIP@publicIP

Он подключается к серверу по SSH и создает туннель от сервера с общедоступным IP-адресом через порт 2222 к компьютеру без общедоступного IP-адреса через порт 22 (SSH).

И тогда на сервере:

ssh -p 2222 loginOfComputerWithoutPublicIP@locahost

Соединение перенаправляется с порта 2222 сервера на порт 22 компьютера по первому туннелю. Возможно, вы захотите использовать инструмент, например, autosshчтобы сделать туннель более устойчивым (т.е. перезапустите его автоматически, когда он выключится).

lgeorget
источник
Спасибо, очень полезно и лаконично. Смотрите ответы на этот вопрос для более подробной информации и других полезных опций.
AstroFloyd