Можно ли проверить наличие сообщений в Интернете с помощью туннелей SSH?

0

Таким образом, в основном на работе мы теряем подключение к Интернету всего на несколько секунд за раз, чего достаточно, чтобы убить наши SSH-туннели, убить наши VoIP-вызовы и т. Д. У меня есть cronjob, настроенный со своим собственным сценарием для обнаружения серьезных сбоев ( продолжительностью более одной минуты), но я не могу обнаружить эти сбои длительностью в несколько секунд.

Обычно в течение дня у меня есть SSH-туннель, подключенный к одному из наших серверов. Это соединение длится большую часть дня, поэтому я думаю о создании сценария, который создает другое соединение с тем же сервером, регистрирует, когда соединение с сервером разорвано, и затем повторно устанавливает соединение для дальнейшей регистрации. Это возможно с базовым bash?

NobleUplift
источник
Очень необычно, что очень короткое прерывание может привести к прерыванию сеанса SSH. У меня был сеанс SSH, который выживает после перезагрузки промежуточного маршрутизатора между клиентом и сервером. Вы уверены, что правильно диагностировали свою проблему? Что вы, вероятно, должны сделать, это настроить реальную систему мониторинга. Что-то вроде Smokeping, Nagios и т. Д. Вместо того, чтобы пытаться заново изобрести колесо.
Зоредаче
Ну, раньше мы теряли интернет на 5-15 минут за один раз. На самом деле, в прошлую пятницу самое большое время простоя составило 23 минуты. Однако за неделю до этого у нас не было длительных отключений. Я получаю сообщение "Сломанная труба", другой сотрудник потеряет связь с Skype или не сможет отправлять электронные письма, а веб-страницы просто не смогут загружаться в течение нескольких секунд.
NobleUplift

Ответы:

1

Существует несколько способов противодействия потере соединения для сеансов SSH.

Во-первых, вы можете установить параметры ServerAliveInterval, ClientAliveInterval и ClientAliveCountMax. ServerAliveInterval - это количество секунд, которое клиент будет ждать перед отправкой нулевого пакета на сервер (чтобы сохранить соединение), обычно значение 60. ClientAliveInterval - это количество секунд, которое сервер будет ожидать перед отправкой пустого пакета клиенту. Наконец, ClientAliveCountMax - это число ClientAliveInterval, в котором клиенту разрешено оставаться в сети перед разрывом соединения; по умолчанию - 3, что означает трехкратный промежуток времени ClientAliveInterval.

Кроме того, вы можете использовать Mosh , мобильную оболочку, которая ...

разрешает роуминг, поддерживает прерывистое соединение и обеспечивает интеллектуальное локальное эхо и редактирование строк пользовательских нажатий клавиш. Mosh - это замена SSH. Он более надежный и отзывчивый, особенно по Wi-Fi, сотовой связи и междугородным каналам. Mosh - бесплатное программное обеспечение, доступное для GNU / Linux, FreeBSD, Solaris, Mac OS X и Android.

И тогда вы можете использовать autossh вместо ssh:

autossh - автоматически перезапускает сеансы и туннели SSH

Какой путь вы выберете, зависит в основном от вкусов. Что касается меня, я использую autossh для туннелей, которые я хочу иметь постоянно, особенно обратные туннели; Я использую mosh для действительно пагубных связей, например, когда ssh'ing в мою лабораторию с самолета или автомобиля. Для всех остальных случаев разумный выбор вышеуказанных параметров для openssh подойдет: например, мой файл .ssh / config содержит следующие строки:

 Host * 
    ServerAliveInterval 60
    IdentitiesOnly yes

и аналогично для серверов, в файле / etc / sshd_config .

И, кстати, для мониторинга вашего соединения в течение длительных периодов времени вы можете использовать mtr (= My TraceRoute), умную комбинацию traceroute и ping, которая будет выполнять трассировку каждые столько секунд (по умолчанию = 1 секунда) до данный сайт, и будет плавно обновлять статистику успешных пингов, давая вам возможность установить хотя бы среднюю долю времени безотказной работы, а не их распределение.

MariusMatutiae
источник
О времени я ответил на это. Решением было переключить интернет-провайдеров с Comcast на AT & T, но это отличные предложения, когда я работаю на ходу.
NobleUplift
0

В конце концов я внес некоторые изменения в свой сценарий, чтобы он по существу работал непрерывно и начинал протоколировать, когда теряет соединение, вместо того, чтобы искать потерянное соединение:

https://github.com/NobleUplift/NetCheck

Но на самом деле нам просто нужно было переключить провайдеров.

NobleUplift
источник