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

7

Ultimamente, estou usando com frequência 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. A coisa mais irritante sobre isso é que o processo do primeiro shell que é aberto 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 do mestre de controle ficarão indisponíveis.

Eu realmente gostaria quando o primeiro comando ssh para um sistema remoto gerasse um processo de segundo plano adicional que mantém a conexão, desde que ainda haja conexões usando a conexão ControlMaster, então eu poderia simplesmente fechar os shells reais sem ter que arriscar para travar outras conexões. Idealmente, o processo ControlMaster em segundo plano seria até mesmo configurável para esperar por um período de tempo para que novos shells ou encaminhamentos de porta usem o ControlMaster antes de finalmente serem desligados.

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

Permitir que um script de invólucro faça isso também não seria tão fácil, pois 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. Assim, um wrapper precisaria entender o .config / ssh perfeitamente para funcionar como pretendido.

    
por aef 18.01.2012 / 11:09

1 resposta

8

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. Eu uso ControlPersist 4h para permitir que as sessões em segundo plano se limpem periodicamente.

    
por 19.01.2012 / 01:24

Tags