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

Функция SSH Multiplexing (мультиплексирование SSH) призвана решить эту проблему, позволяя повторно использовать одно установленное TCP-соединение для множества SSH-сессий. Это означает, что после первого успешного входа в систему все последующие команды ssh user@host в новых терминальных вкладках или скриптах будут выполняться практически мгновенно, без необходимости повторного ввода паролей или использования ключей.

Как включить SSH Multiplexing

Для активации SSH Multiplexing необходимо внести несколько строк в конфигурационный файл SSH на вашем локальном компьютере: ~/.ssh/config.

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 10m

Не забудьте предварительно создать директорию для хранения сокетов:

mkdir -p ~/.ssh/sockets

Разъяснение параметров конфигурации

  • ControlMaster auto: Этот параметр указывает клиенту SSH автоматически обнаруживать существующее мастер-соединение. Если активное соединение к целевому хосту уже существует, оно будет повторно использовано. В противном случае будет создано новое мастер-соединение.
  • ControlPath ~/.ssh/sockets/%r@%h-%p: Определяет путь к файлу сокета, который будет использоваться для связи между мастер-процессом и дочерними SSH-сессиями. Переменные %r, %h и %p динамически заменяются на имя пользователя, имя хоста и номер порта соответственно, обеспечивая уникальный сокет для каждой комбинации.
  • ControlPersist 10m: Данный параметр указывает мастер-соединению оставаться активным в фоновом режиме в течение 10 минут после закрытия всех дочерних сессий. Это позволяет избежать повторного установления соединения, если вы быстро откроете новую сессию после закрытия предыдущих. Вы можете настроить это значение по своему усмотрению (например, 0 для немедленного закрытия, no для сохранения до выхода из всех сессий, или N для N секунд/минут/часов).

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

Важные аспекты и потенциальные проблемы

Лимит сессий (MaxSessions)

По умолчанию большинство SSH-серверов (настраивается в /etc/ssh/sshd_config) ограничивают количество мультиплексированных сессий на одно соединение до 10 (параметр MaxSessions 10). Если вы попытаетесь открыть 11-ю сессию через то же мастер-соединение, она может зависнуть или быть отклонена.

Решение: Если вам требуется больше сессий, вы можете увеличить значение MaxSessions в файле конфигурации sshd_config на удаленном сервере и перезапустить службу SSH.

Единая точка отказа

Мультиплексирование SSH создает одну точку отказа. Если мастер-процесс, управляющий основным соединением, зависнет или будет принудительно завершен (например, с помощью kill -9), все дочерние SSH-сессии, использующие это мастер-соединение, будут одновременно разорваны. Важно учитывать этот риск при планировании вашей работы.