Gerar automaticamente um processo em segundo plano do ControlMaster no primeiro acesso a um sistema remoto ssh

9

Ultimamente, muitas vezes estou usando o recurso ControlMaster do cliente SSH, que me permite usar uma única conexão SSH-TCP para vários shells e encaminhamentos de porta para o mesmo sistema remoto. O mais irritante disso é que o processo do primeiro shell que se abre se torna automaticamente o ControlMaster. Isso significa que, se esse processo for finalizado, todos os outros shells e encaminhamentos de porta usando a conexão principal de controle ficarão indisponíveis.

Eu realmente gostaria que o primeiro comando ssh em um sistema remoto gerasse um processo em segundo plano adicional que mantém a conexão enquanto ainda houver conexões usando a conexão ControlMaster, para que eu pudesse simplesmente fechar os shells reais sem o risco de travar outros conexões. Idealmente, o processo ControlMaster em segundo plano seria configurável para aguardar um período de tempo até que novos shells ou encaminhamentos de portas usem o ControlMaster antes de finalmente desligar.

Existe uma maneira de fazer o cliente ssh fazer uma coisa dessas? Eu sei que poderia criar essa conexão manualmente antes de usar o ssh para criar o primeiro shell, mas quero explicitamente que isso aconteça automaticamente porque, caso contrário, certamente me esqueceria de fazê-lo de vez em quando.

Permitir que um script wrapper faça isso também não seria tão fácil, porque geralmente uso atalhos configurados para nomes de servidores remotos em .ssh / config e o soquete ControlMaster é criado usando USERNAME @ NETWORK_NAME: NETWORK_PORT como nome. Portanto, um wrapper precisaria entender .config / ssh perfeitamente para funcionar como pretendido.

aef
fonte

Respostas:

10

Você deve usar a opção de configuração 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 é o comportamento padrão, que é como você descreve. Uso ControlPersist 4h para permitir que as sessões em segundo plano se limpem periodicamente.

Daniel Lawson
fonte
Isso está disponível no RHEL?
ewwhite
1
@whwhite Eu não tenho RHEL, mas o CentOS deve ser o mesmo. Está no CentOS 7, mas parece não estar no CentOS 6.5. O Alterações openssh sugere que ele foi adicionado na openssh 5,6, e CentOS 6.x só tem 5.3 (7.0 tem openssh 6.4)
Daniel Lawson