Processo SSH não morto na máquina remota quando o sistema remoto desconecta inesperadamente

8

Tenho uma pergunta para a qual não consegui encontrar uma resposta. Eu tenho dois computadores, ambos os quais executam o Ubuntu 12.04. Eu mantenho um dos meus computadores em casa e uso o SSH para conectá-lo a partir do outro computador ("remoto"). O computador remoto pode se conectar ao computador doméstico sem problemas. O computador remoto também tem SetAliveInterval definido como 60 em / etc / ssh / ssh_config, para que a conexão não termine se eu me afastar do computador por um momento.

Ocasionalmente, minha conexão à Internet no meu computador remoto é interrompida. Interrupções na Internet fazem meu túnel SSH fechar (é claro). Porém, quando eu restauro a conectividade com a Internet e reconecto ao computador doméstico usando um novo túnel SSH, percebo #ps axque o antigo processo de conexão SSH ainda está em execução. Esse é um problema porque eu uso um diretório inicial criptografado no computador doméstico, que não permite que os arquivos sejam criptografados novamente até que a conexão SSH (agora morta) seja interrompida.

Existe uma maneira de definir o sshd_config no computador doméstico para que ele detecte automaticamente quando uma conexão morreu e a encerre?

JL
fonte

Respostas:

5

Tente screen ou tmux . No lado do servidor, ou nos dois lados, se você quiser:

sudo apt-get install tmux

Após o login, inicie o tmux .

tmux

Se a conexão for interrompida, efetue login novamente via ssh e reconecte a sessão tmux . Para descobrir o número da sessão:

tmux ls

A saída pode ser algo como isto:

Janelas 0: 1 (criada terça-feira, 25 de dezembro, 19:20:40 2012)

Conecte-se à sessão numerada tmux assim:

tmux attach -t 0

Então você está de volta onde você o deixou. Você não terá que matar as sessões. Eles apenas aguardam sua próxima visita. Ou, se você quiser apenas matar a sessão ...

No lado do servidor, consulte a /etc/ssh/sshd_configconfiguração para ClientAliveInterval e ClientAliveCountMax . ( man 5 ssh_config)

ClientAliveInterval 300
ClientAliveCountMax 0

Depois que eles forem alterados para sua preferência, reinicie o servidor SSH.

sudo /etc/init.d/ssh restart

Os 300 são segundos (cinco minutos).


fonte
Era exatamente isso que eu estava procurando! Começarei com ClientAliveInterval e, definitivamente, também testarei o tmux. Obrigado!
JL
1
Uma terceira opção além de Screen e Tmux é Byobu : Website , Wikipedia . A partir do site: "Ele foi originalmente projetado para fornecer aprimoramentos elegantes para a GNU Screen funcional, simples e prática, para a distribuição do servidor Ubuntu. O Byobu agora inclui perfis aprimorados, combinações de teclas convenientes, utilitários de configuração e notificações de status de alternância do sistema para o gerenciador de janelas GNU Screen e o multiplexador de terminal Tmux mais moderno, e funciona na maioria das distribuições Linux, BSD e Mac ".
sierrasdetandil
1

Você pode tentar o moshInstalar mosh , um substituto para o SSH construído sobre o SSH. Ele suporta roaming e conectividade intermitente; portanto, sua sessão Mosh (SSH) continuaria de onde você parou sempre que sua conexão com a Internet fosse restabelecida após uma interrupção.

Você precisará instalar o Mosh nas duas máquinas.

Referências:

Flimm
fonte