У меня есть удаленный компьютер Raspberry Pi, который подключается из-за ограничительного брандмауэра к моему серверу через обратный туннель SSH. Представьте, что этот Raspberry Pi находится на труднодоступной крыше здания в другой стране (возможно, во время шторма), поэтому я хочу, чтобы его подключение было надежным.
Чтобы подключиться к серверу, Raspberry Pi запускает такой процесс:
while true; do
ssh -R 19999:localhost:22 www.sern.pro
sleep 30
done
Часть 19999:localhost:22
основном означает, что весь трафик через порт 19999 на сервере должен быть перенаправлен на порт 22 Raspberry Pi. Итак, я могу подключиться к Raspberry Pi, используя SSHing к серверу, а затем выполнив команду, подобную следующей:
ssh localhost -p 19999
Обычно это работает просто отлично, и на сервере такая команда, как netstat --all --timers --program --numeric | egrep '127.0.0.1:*(LISTEN|.*)' | sort
перечисляет обратное соединение SSH примерно так:
tcp 0 0 127.0.0.1:19999 0.0.0.0:* LISTEN 2972/5 off (0.00/0/0)
Однако иногда я обнаруживал, что этот список на сервере исчезает, а Raspberry Pi поддерживает SSH-соединение с сервером. То есть команда ssh localhost -p 19999
сообщение об ошибке, подобное следующему:
ssh: connect to host localhost port 19999: Connection refused
Тем не менее, соединение Raspberry Pi SSH остается идеальным, способным выполнять команды на сервере. Я не знаю правильных слов, чтобы описать, что происходит не так, когда это происходит.
Итак ... если не считать бронирование рейса и восхождение на крышу здания, как я могу снова подобрать это активное соединение SSH как правильный обратный туннель SSH? Как я могу снова получить доступ к локальному порту?