Туннель SSH создан из удаленного местоположения, но ненадежный доступ с локального компьютера

Два компьютера:

  1. Настольный-Ubuntu; фиксированный локальный IP, подключенный к модему с открытым портом 22 и переадресацией на него. Из-за динамического IP у меня нет учетной записи ip. Поэтому domain-Desktop-Ubuntu.com пересылает входящие запросы на этот компьютер.
  2. Удаленный Raspberry Pi 3 подключен к сотовой сети, в которой все входящие запросы закрыты интернет-провайдером.

Мне нужен SSH-доступ из Desktop-Ubuntu в RPi. Потому что это невозможно напрямую, я построил туннель. Ведь сортируй или пытаешься заставить его работать постоянно (autossh например), это моя схема:

На RPi:

sshd_config:

 ClientAliveInterval 120     
 ClientAliveCountMax 720

Crontab каждые 5 минут, чтобы проверить, если ssh Идентификатор процесса не является нулевым.
screen используется для хранения ssh вывод представляет собой отдельное окно оболочки.

*/5 * * * * /bin/sh /path-to/check-ssh-tunnel.sh

check-ssh-tunnel.sh:

COMMAND="/usr/bin/screen -dmS ssh-Ubuntu /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g"
COMMAND_SSH="/usr/bin/ssh -R 2255:localhost:22 domain-Desktop-Ubuntu.com -g"
PID=$(/usr/bin/pgrep -f -x "$COMMAND_SSH")
if [ "$PID" = "" ]
then
    $COMMAND
fi

Вот связанный ps aux | grep ssh Я получаю 3 часа после перезагрузки:

pi        2128  0.0  0.2   5396  2252 ?        Ss     08:25     0:00 /usr/bin/SCREEN -dmS ssh-Desktop-Ubuntu /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g  
pi        2130  0.0  0.5   9132  4748 pts/0    Ss+  **08:25**   0:00 /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g

Если я kill 2128 cron работает и:

pi        4755  0.0  0.2   5396  2092 ?        Ss     11:25     0:00 /usr/bin/SCREEN -dmS ssh-Desktop-Ubuntu /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g     
pi        4756  0.0  0.5   9132  4840 pts/0    Ss+  **11:25**   0:00 /usr/bin/ssh -R 2255:localhost:22 user@domain-Desktop-Ubuntu.com -g

Чтобы получить доступ к RPi из Desktop-Ubuntu:

ssh -p 2255 pi@localhost

Моя проблема в том, что это соединение действует случайным образом:

  • иногда он спрашивает пароль, и я подключаюсь
  • иногда ssh: connect to host localhost port 2255: Connection refused
  • иногда требуется много времени для окончательного вывода ssh_exchange_identification: read: Connection reset by peerПосле повторной попытки: Connection refused,

Вернуться к RPi, кажется, ничего не изменилось:

$ screen -r      # to get the ssh window
user@domain-Desktop-Ubuntu.com~$ ssh -p 2255 pi@localhost
ssh: connect to host localhost port 2255: Connection refused

В настоящее время и для всех этих тестов я удаленно управляю RPi с помощью Teamviewer. По некоторым причинам я не хочу использовать это в будущем, если это не было бы абсолютно необходимо. Вот почему мне нужен SSH туннель.

Что случилось? Как заставить туннель работать надежно?

0 ответов

Другие вопросы по тегам