Reconectando automaticamente conexões SSH com uma sessão 'tela' específica

10

Normalmente, tenho várias janelas de terminal, cada uma das quais conectada via ssh a um servidor remoto. Em cada janela, trabalho com o programa gnu screen, para garantir a persistência dos processos interativos em caso de desconexão.

Atualmente, sempre que a conexão ssh cai (como quando eu coloco o computador cliente em suspensão durante a noite), tenho que reiniciar manualmente e tediosamente a sessão ssh dentro de cada janela e, em cada janela, tediosamente retomar a sessão de tela específica (por exemplo, "tela - r 3453 "em uma janela," tela -r 3462 "na outra etc.)

Existe uma maneira elegante de automatizar isso? Especificamente:

  • reconecte a sessão ssh se ela cair, assim que uma conexão com a Internet for detectada

  • execute a instância de tela específica para a janela do terminal assim que o ssh se reconectar

Obrigado por qualquer dica sobre isso

GJ.
fonte

Respostas:

10

Você pode executar o seguinte: ssh -t hostname screen -r 3453para reconectar. Se você quiser fazer isso em um loop, use o seguinte em um script.

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

Isso funciona melhor se você tiver configurado as teclas ssh para poder fazer login sem digitar sua senha. Eu também recomendo que você olhe para o tmux, uma implementação mais moderna da tela. Na verdade, eu uso o script acima com tela. Você provavelmente também deseja usar uma sessão de tela nomeada, em vez de apenas usar o pid, como faz no seu exemplo.

Jason Axelson
fonte
Obrigado! Para que exatamente serve o "-o BatchMode = yes"?
GJ.
Isso permitirá que você não solicite a senha. Em 'man ssh_config': "a consulta de senha / senha será desativada. Esta opção é útil em scripts e outros trabalhos em lotes em que nenhum usuário está presente para fornecer a senha." Portanto, use-o apenas se você já tiver as teclas ssh configuradas.
Jason Axelson
5

Não há necessidade de cortar loops bash. Você precisa procurar em autossh . Eu não o usei muito, mas meu entendimento é que você simplesmente substitui sshpor autosshseu comando.

Edit: De fato, o autossh vem com um script chamado rscreenque parece ser projetado exatamente para esse fim.

Ryan C. Thompson
fonte