Назад | Перейти на главную страницу

Автоматически запускать фоновый процесс ControlMaster при первом доступе к удаленной системе ssh

В последнее время я часто использую функцию ControlMaster клиента SSH, которая позволяет мне использовать одно SSH-TCP-соединение для нескольких оболочек и переадресации портов в одну и ту же удаленную систему. Самое неприятное в этом то, что первый открытый процесс оболочки автоматически становится ControlMaster. Это означает, что если этот процесс будет завершен, все другие оболочки и переадресация портов, использующие управляющее главное соединение, станут недоступны.

Мне бы очень хотелось, чтобы первая команда ssh для удаленной системы порождала дополнительный фоновый процесс, который удерживает соединение, пока есть соединения, использующие соединение ControlMaster, чтобы я мог просто закрыть фактические оболочки, не рискуя вызвать сбой других соединения. В идеале фоновый процесс ControlMaster можно было бы даже настроить на ожидание определенного времени для новых командных интерпретаторов или переадресации портов для использования ControlMaster перед окончательным завершением работы.

Есть ли способ заставить ssh-клиент делать такие вещи? Я знаю, что могу создать такое соединение вручную, прежде чем использовать ssh для создания первой оболочки, но я явно хочу, чтобы это происходило автоматически, потому что в противном случае я бы наверняка забыл делать это время от времени.

Позволить сценарию-оболочке сделать это тоже будет не так просто, потому что я часто использую настроенные сокращения для имен удаленных серверов в .ssh / config, а сокет ControlMaster создается с использованием USERNAME @ NETWORK_NAME: NETWORK_PORT в качестве имени. Таким образом, оболочка должна правильно понимать .config / ssh, чтобы работать по назначению.

Вы должны использовать параметр конфигурации ControlPersist.

 ControlPersist
         When used in conjunction with ControlMaster, specifies that the
         master connection should remain open in the background (waiting
         for future client connections) after the initial client connec‐
         tion has been closed.  If set to “no”, then the master connection
         will not be placed into the background, and will close as soon as
         the initial client connection is closed.  If set to “yes”, then
         the master connection will remain in the background indefinitely
         (until killed or closed via a mechanism such as the ssh(1) “-O
         exit” option).  If set to a time in seconds, or a time in any of
         the formats documented in sshd_config(5), then the backgrounded
         master connection will automatically terminate after it has
         remained idle (with no client connections) for the specified
         time.

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