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

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

2 ответа2

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 секунда) до данный сайт, и будет плавно обновлять статистику успешных пингов, давая вам возможность установить хотя бы среднюю долю времени безотказной работы, а не их распределение.

0

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

https://github.com/NobleUplift/NetCheck

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .