Reconexão automática de conexões SSH com uma sessão específica de 'tela'

9

Eu normalmente tenho várias janelas de terminal, cada uma delas conectada via ssh a um servidor remoto. Em cada janela eu trabalho usando o programa de tela gnu, para garantir a persistência dos processos interativos em caso de desconexão.

Atualmente, sempre que a conexão ssh é interrompida (por exemplo, quando coloco meu computador cliente para dormir durante a noite), reinicie manual e tediosamente a sessão ssh dentro de cada janela e, em cada janela, retome a sessão de tela específica (por exemplo, "screen -r 3453" em uma janela, "screen -r 3462" na outra etc.)

Existe uma maneira elegante de automatizar isso? Especificamente:

  • reconecte a sessão ssh se gotas, assim que uma Internet conexão é detectada

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

Obrigado por qualquer dica sobre isso

    
por GJ. 14.09.2010 / 01:16

2 respostas

8

Você pode executar isto: ssh -t hostname screen -r 3453 para reconectar. Se você quiser fazer isso em um loop, eu uso 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 a configuração ssh-keys para poder fazer o login sem digitar sua senha. Eu também recomendo que você olhe para o tmux, uma implementação mais moderna da tela. Eu realmente uso o script acima com tela. Você provavelmente também quer usar uma sessão de tela com nome, em vez de apenas usar o pid como você faz no seu exemplo.

    
por 14.09.2010 / 03:59
5

Não há necessidade de hackear loops bash. Você precisa olhar para autossh . Eu mesmo não usei muito, mas meu entendimento é que você simplesmente substitui ssh por autossh em seu comando.

Edit: De fato, o autossh vem com um script chamado rscreen , que parece ser projetado exatamente para este propósito.

    
por 15.03.2011 / 19:00