Проблемы с соединением SSH

June 24, 2020

Стокнулся с проблемами при работе по SSH.

  1. Быстрый разрыв соединения при бездействии (терминал просто зависает)
  2. Невозможно подключаться ко многим хостам. Ошибка Too Many Authentication Failures.

Для моей работы крайне критичные проблемы, так как постоянно приходится подключаться ко различным хостам и держать по несколько одновременно открытых SSH-сессий.

Разрыв соединения

Соединение SSH рвётся через примерно 3 минуты бездействия (оказалось действительно 3 минуты). Крайне раздражающая вещь. Особенно, когда работаешь параллельно в нескольких терминалах и также есть другие требующие внимания задачи где-то ещё. Отвлекаешься от терминала на несколько минут, а весь твой труд на смарку, так как сессия вылетела на редактировании какого-нибудь файла и теперь надо всё начинать сначала.

Как оказалось, проблема решается весьма просто.

Управление поддержанием активного соединения в SSH реализуется через два параметра в ssh_config:

ServerAliveInterval — по-умолчанию равно 0. Это период в секундах, через которые SSH посылает сигналы о том, что нельзя обрывать соединение. Начинает работать с момента бездействия.
ServerAliveCountMax — количество таких сигналов. По-умолчанию 3.

Таким образом, чтобы продлить время неактивной сессии надо вписать в ssh_config, а лучше в ~/.ssh/config пользователя под которым работаете на локальном компьютере, следующие параметры:

ServerAliveInterval 60
ServerAliveCountMax 120

Это позволит не рвать соединение с сервером на протяжении 2-х часов (120 * 60s = 2h). Вполне достаточно для комфортной работы.

Too Many Authentication Failures

Данная проблема возникает, когда вы используете много различных SSH-ключей для подключения к удалённым хостам. SSH пытается использовать все доступные ключи для аутентификации на хосте X. При этом, естественно, на хосте X никаких ключей нет (они для хостов Y, Z), поэтому получаем ошибку аутентификации.

Чтобы устранить эту проблему нужно добавть в ~/.ssh/config:

Host * 
        IdentitiesOnly=yes

Ссылки

^