Тунель SSH створений з віддаленого місця, але ненадійний доступ з локального комп'ютера


0

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

  1. Desktop-Ubuntu; фіксований локальний IP, підключений до модему з відкритим портом 22 та переадресацією до нього. Через динамічний 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працюю, і:

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.

Що не так? Як змусити тунель працювати надійно?


1
ClientAliveIntervalі т.д. питання на сервері. Ваш RPI є клієнтом, коли він намагається встановити тунель. Ціни для цієї мети, я думаю, дуже високі. Перевірте це питання . З'єднання, яке намагається встановити тунель, повинно бути невдалим, якщо переадресація порту не вдалася. Перевірте це питання та використовуйте ExitOnForwardFailure=yes. Якщо мої два посилання допомогли, будь ласка, підсиліть мою відповідь (-и) там і напишіть тут свою (можливо, посилання). Якщо вони не допомогли, дайте відгуки.
Каміль Маціоровський

1
На стороні клієнта ви можете використовувати ServerAliveIntervalта ServerAliveCountMax(вони призначені для ssh, а не для sshd).
Каміль Маціоровський

Чи допомогли мої посилання? Якщо так, ви збираєтесь написати відповідь? чи я повинен?
Каміль Маціоровський

Так, чудово! Я вже підтримав відповідні відповіді та ваші попередні коментарі кілька днів тому. ExitOnForwardFailure=yesбуло ключовим
dstonek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.