Я использовал эту конфигурацию туннеля в прошлом в течение нескольких месяцев.
У меня есть удаленный Raspberry Pi (Raspbian Stretch / Debian) с модем-маршрутизатором, чтобы иметь s sh доступ к нему.
Его публикация c IP меняется каждые 12 часов. Интернет-провайдер не разрешает входящий s sh доступ, поэтому я создал туннель для своей локальной Ubuntu, используя службы noip (также здесь есть Dynami c IP).
На RPi у меня есть скрипт, который проверяет каждые две минуты, что туннель жив DU C отправляет новый локальный publi c IP и / или удаленный компьютер восстанавливает inte rnet соединение)
Сценарий удаленной проверки
COMMAND="/usr/bin/screen -dmS ssh-Ubuntu /usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g"
COMMAND_SSH="/usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g"
PID=$(/usr/bin/pgrep -f -x "$COMMAND_SSH")
if [ "$PID" = "" ]
then
$COMMAND
fi
Сегодня я делал какую-то работу из моего локального Ubuntu, используя туннель:
ssh -p 2244 pi@localhost
, но внезапно я потерял соединение и не могу восстановить его.
В некоторые недели a go Я обнаружил, что PiTunnel я использую в качестве плана B (это очень полезно, но вам нужно иметь клавиатуру для работы в командной оболочке терминала; это не полезно для смартфонов или планшетов, на данный момент)
Использование piTunnel
ps aux | grep ssh
pi 18301 0.0 0.2 5788 2084 ? Ss 08:21 0:00 /usr/bin/SCREEN -dmS ssh-Ubuntu /usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g
pi 18303 0.0 0.5 9532 4708 pts/0 Ss+ 08:21 0:00 /usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g
Кажется, что туннель жив, но это не так.
Почему эти задачи не были завершены, если туннель был закрыт ( конечно из-за смены IP-адреса)?
Я убил эти задачи вручную и позволил сценарию проверки туннеля перестроить его во время, запланированное в crontab.
Туннель был перестроен.
Я должен заметить, что я использовал этот туннель Конфигурация более года go на 4 месяца без проблем.
ОБНОВЛЕНИЕ 1: Я добавил сравнение IP (из-за обновления удаленного publi c IP) в сценарий, чтобы перестроить туннель.
COMMAND="/usr/bin/screen -dmS ssh-Ubuntu /usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g"
COMMAND_SSH="/usr/bin/ssh -o ExitOnForwardFailure=yes -R 2244:localhost:22 user@noip.tld -g"
PID=$(/usr/bin/pgrep -f -x "$COMMAND_SSH")
IP1=$(wget -qO - icanhazip.com) #present public IP
IP2=$(cat /path-to/ip-old.txt)
if [ "$PID" = "" ]
then
$COMMAND
else
if [ "$IP1" != "$IP2" ]
then
echo "$IP1" > /path-to/ip-old.txt
kill "$PID"
$COMMAND
fi
fi
Это только исправление, которое работает, но я до сих пор не знаю, почему задача s sh -tunnel остается открытой, несмотря на то, что туннель закрыт.