S SH -Туннель закрывается, но задание еще живо - PullRequest
0 голосов
/ 19 марта 2020

Я использовал эту конфигурацию туннеля в прошлом в течение нескольких месяцев.
У меня есть удаленный 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 остается открытой, несмотря на то, что туннель закрыт.

...