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

9

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

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

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

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

Американские экспедиционные войска
источник

Ответы:

10

Вы должны использовать опцию конфигурации 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 no - это поведение по умолчанию, которое вы описываете. Я использую ControlPersist 4h, чтобы фоновые сессии периодически очищались.

Дэниел Лоусон
источник
Это доступно на RHEL?
Ewwhite
1
@ Белый у меня нет RHEL, но CentOS должен быть таким же. Это в CentOS 7, но, похоже, не в CentOS 6.5. Список изменений openssh предполагает, что он был добавлен в openssh 5.6, а CentOS 6.x имеет только 5.3 (7.0 имеет openssh 6.4)
Даниэль Лоусон