В последнее время я часто использую функцию 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ч. чтобы позволить фоновым сеансам периодически очищаться.