Общая связь часто закрывается при открытии нового подключения.

Вопрос или проблема

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

Мой .ssh/config выглядит примерно так:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Host remote
HostName login.remote.com
User username
ForwardX11 yes
ServerAliveInterval 300

Это работает довольно хорошо с одним исключением. После установления первого соединения (главное соединение) это работает нормально: я могу использовать терминал с главным соединением для выполнения задач на удаленном сервере и могу повторно использовать главное соединение в новом терминале, вызвав ssh remote, что открывает новое соединение без необходимости повторно вводить мои учетные данные.

Однако, если прошло какое-то время (от нескольких десятков минут до часов, я точно не уверен) и я хочу открыть новое соединение, это не удается, и главное соединение закрывается с сообщением (в главном терминале):

Connection to login.remote.com closed by remote host.
Connection to login.remote.com closed.

и (в терминале, который я использую для открытия нового соединения)

Shared connection to login.remote.com closed.

хотя оно совершенно нормально работало лишь секунды назад (я мог выполнять команды на удаленном сервере, используя терминал с главным соединением).

ДОПОЛНЕНИЕ:: Это вывод ssh -vvv remote для вновь открытой сессии, которая не удается открыть должным образом:

OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Чтение данных конфигурации /home/$USERNAME/.ssh/config
debug1: /home/$USERNAME/.ssh/config строка 27: Применение параметров для remote
debug1: Чтение данных конфигурации /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config строка 19: Применение параметров для *
debug1: auto-mux: Попытка использования существующего мастера
debug2: fd 3 установка O_NONBLOCK
debug2: mux_client_hello_exchange: версия мастера 4
debug3: mux_client_forwards: запрашиваемые перенаправления: 0 локальных, 0 удаленных
debug3: mux_client_request_session: вход
debug3: mux_client_request_alive: вход
debug3: mux_client_request_alive: завершено pid = 23500
debug3: mux_client_request_session: запрос сессии отправлен
debug1: mux_client_request_session: идентификатор сессии мастера: 5
debug3: mux_client_read_packet: ошибка чтения заголовка: Broken pipe
debug2: Управляющий мастер неожиданно завершил работу
Shared connection to login.remote.com closed.

Это кажется мне довольно странным, и я полагаю, что это либо ошибка, либо неправильная конфигурация, можете помочь?

Отключите эти параметры в конфигурации ssh:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Установите значение ServerAliveInterval достаточно маленьким:

ServerAliveInterval 30

Ответ или решение

Причина проблемы с закрытием общего соединения при открытии нового подключения через SSH

Приветствую вас! Вы столкнулись с распространенной проблемой, связанной с использованием функции ControlMaster в SSH. Данная функция предназначена для переиспользования соединений, что позволяет значительно ускорить процесс подключения к удаленному серверу. Однако, как вы заметили, в вашем случае она иногда приводит к неожиданным разрывам подключения.

Подробный анализ проблемы

Основная проблема заключается в том, что SSH-сессия, действующая как мастер-соединение, автоматически закрывается по истечении определенного времени бездействия. Ваша конфигурация SSH включает параметр ServerAliveInterval, который измеряет, как долго клиент будет поддерживать соединение в автоматическом режиме, отправляя сообщения "alive" на сервер.

Ключевые параметры в вашей конфигурации:

  • ControlMaster auto: Эта настройка позволяет SSH автоматически использовать существующие соединения для новых SSH-сессий.
  • ControlPath: Указывает путь для хранения информации о соединениях.
  • ServerAliveInterval 300: Параметр, который установлен на 300 секунд (5 минут). Это означает, что клиент будет пытаться поддерживать соединение открытым, отправляя сообщения об активности каждые 5 минут.

Почему происходит разрыв подключения?

  1. Сетевая активность: Если между вашим клиентом и сервером происходит разрыв сетевого соединения, это может привести к закрытию как мастер-соединения, так и любых связанных с ним подключений.

  2. Сторонние факторы: Некоторые настройки на стороне сервера, такие как ClientAliveInterval и ClientAliveCountMax, могут также влиять на то, как долго сервер удерживает соединения активными. Если сервер не получает сообщения от клиента на протяжении определенного времени, он может закрыть сессию.

  3. Проблемы с маршрутизацией: Если в течение длительного времени соединение не активируется, маршрутизаторы или межсетевые экраны между вами и сервером могут разрывать соединение, воспринимая его как бездействующее.

Рекомендации по устранению проблемы

  1. Уменьшите значение параметра ServerAliveInterval: Попробуйте установить значение на 30 или 60 секунд, вместо 300. Это позволит вашему клиенту чаще отправлять сообщения о активности к серверу, что поможет удерживать соединение открытым:

    ServerAliveInterval 30
  2. Добавьте параметр ServerAliveCountMax: Этот параметр позволяет задать количество неудачных попыток отправки сообщений супервизора перед закрытием соединения. Установите, например, это значение на 3:

    ServerAliveCountMax 3
  3. Проверьте настройки ClientAliveInterval на сервере: Убедитесь, что сервер настроен на более длительное время ожидания. Например:

    ClientAliveInterval 120
    ClientAliveCountMax 2
  4. Рассмотрите возможность использования опции ControlPersist: Эта опция позволяет вам поддерживать мастер-соединение открытым даже после закрытия всех окон терминала:

    ControlPersist 10m

Заключение

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

Если у вас есть вопросы или вам требуется дополнительная помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...