В комплект /etc/ssh/sshd
для компьютера Б :
AllowTcpForwarding yes
TCPKeepAlive yes
С компьютера А :
$ ssh -R 2222:localhost:22 ip.of.computer.b
С компьютера Б :
$ ssh localhost -p 2222
Обратите внимание, что 2222 - это произвольный номер порта, который я выбрал. Этот порт на компьютере B будет затем туннелирован обратно через соединение SSH, инициализированное на компьютере A с портом 22. Если у вас есть несколько машин, вы должны использовать разные порты для каждой машины.
Для вашего случая использования вы, вероятно, захотите запустить его из скрипта, чтобы вы могли сделать его демоном и периодически пытаться повторно подключиться, если ссылка была удалена. Вы, вероятно, захотите специальную учетную запись с оболочкой только /bin/true
на компьютере B для обработки входящих соединений. Затем вы можете настроить либо одну клавишу, либо несколько клавиш для каждой машины, которой разрешено «звонить домой».
На компьютере А вы могли бы найти -n
, -N
и -T
опции полезных отключить его от локального ввода (так что он может работать в фоновом режиме), а не пытаться выполнить любую удаленную команду, просто открыть туннель, а не создавать терминал.
Большинство обычных методов порождения демона не очень хорошо работают с настройкой сетевого туннеля, подобного этому. Проблема с сетевым подключением заставила бы его попытаться сломать стену, чтобы пройти. Простая петля с ожиданием сна должна помочь. Десять минут - это хорошее число, потому что оно не затопляет сеть и не регистрирует файлы с попытками, если есть проблема (например, компьютер B находится в автономном режиме), но все равно возвращает вас достаточно быстро, если соединение разорвано.
#/bin/sh
while true; do
sleep $((60*10))
ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done
Такой скрипт можно запустить при загрузке /etc/rc.local
. Ваше первое изменение для входа в систему начнется примерно через десять минут после загрузки компьютера А.