
Existe uma maneira de conectar-se a uma sessão ssh que foi desconectada? Estamos tendo problemas com nossa conexão de rede com um site remoto no qual estamos trabalhando separadamente; entretanto, nesse meio tempo, experimentamos um grande número de desconexões devido à perda de pacotes enquanto estamos conectados a servidores em locais remotos. Muitas vezes a sessão permanece ativa por um tempo, e às vezes acontece de estar no meio de alguma ação (edição de arquivo, execução de algum processo, etc...) para a qual preciso voltar ao invés de reiniciar, se possível.
Responder1
ATUALIZAÇÃO: Para uma resposta real, veja a resposta de zero_r abaixo
Esta não é uma resposta, mas uma solução alternativa. Usartela.
Ao fazer login pela primeira vez, execute screen. Você obtém outro shell e executa comandos nele. Se você estiver desconectado, o processo screen mantém o terminal ativo para que seu shell e os processos que ele está executando não caiam. Ao reconectar, execute 'screen -r' para continuar.
Há muito mais para configurar e usar a tela, mas o acima deve solucionar o seu problema.
Responder2
Tente definir ClientAliveInterval (por exemplo, 60) e TCPKeepAlive (sim ou não) para valores apropriados no servidor sshd.conf .
Isso deve manter sua sessão ativa mesmo que a conexão seja perdida por alguns minutos.
Responder3
Como acima mencionado,Tela GNUé o caminho a seguir. Ele permite que você tenha uma 'sessão de tela' na caixa remota na qual você pode executar vários comandos, por meio de várias 'janelas de tela'. Isso simplesmente será desconectado se a conexão SSH pai morrer, mantendo todos os subprocessos em execução dentro dela vivos e bem.
man screen
é seu amigo, como sempre, e o pacote do sistema operacional deve ser chamado screen
se não estiver instalado por padrão.
Os princípios básicos são:
Inicie uma sessão de tela (em seu host remoto):
$ screen
Desconecte-se da sua sessão de tela: CTRL-A,d
Reconecte-se à sua sessão de tela após fazer login novamente:
$ screen -d -r
Abra outra 'janela' de tela: CTRL-A,c
Percorra as janelas da tela aberta: CTRL-A,space
Hágrande quantidadede coisas legais que você pode fazer com a tela. Eu o uso há mais de 10 anos e ainda estou descobrindo novos recursos. É meu utilitário Unix favorito.
Responder4
Às vezes eu esqueci de executar a tela também e perdi meu trabalho inacabado. Nesse caso, embora não possamos reconectar uma sessão SSH interrompida, ainda é possível reparar um programa em execução em um novo terminal e retomar o que você estava fazendo graças ao reptyr
.
Depois de desconectar acidentalmente de uma sessão SSH, a primeira coisa é executar screen
(ou tmux, o que você quiser) para que a conexão não seja interrompida novamente. Então, na nova sessão, execute ps aux | grep {The process to be resumed}
para obter o PID. Com o PID, você poderia tentar reptyr {PID}
ou reptyr -T {PID}
(se houver subprocessos) continuar o trabalho.
Notas Adicionais:
Além disso, considere definir ClientAliveInterval (por exemplo, 60) e TCPKeepAlive (sim ou não) para valores apropriados no servidor sshd.confcomo mencionado na resposta de zero_r. Ou, se você tiver que trabalhar em um ambiente de rede com uma taxa de perda de pacotes altíssima, como Starlink em tempestade,mudar para MOSH, uma alternativa SSH, mas baseada em UDP.