Existe uma maneira de se conectar 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; no entanto, nesse meio tempo, experimentamos um grande número de desconexões devido a pacotes perdidos enquanto conectados a servidores no local remoto. Muitas vezes a sessão fica 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...) que eu preciso voltar ao invés de reiniciar se possível.
Tente definir ClientAliveInterval (por exemplo, 60) e TCPKeepAlive (sim ou não) para valores apropriados no sshd.conf do lado do servidor.
Isso deve manter sua sessão ativa mesmo que a conexão seja perdida por minutos.
ATUALIZAÇÃO: Para uma resposta real, veja a resposta de zero_r abaixo
Esta não é uma resposta, mas uma solução alternativa. Usar tela .
Quando você fizer login pela primeira vez, execute a tela. Você obtém outro shell, executa comandos nele. Se você estiver desconectado, o processo de tela mantém o terminal ativo para que seu shell e os processos em execução não caiam. Quando você se reconectar, execute 'screen -r' para continuar.
Há muito mais para configurar e usar a tela, mas o acima deve solucionar seu problema.
Como mencionado acima, o GNU Screen é o caminho a percorrer. Ele permite que você tenha uma 'sessão de tela' na caixa remota na qual você pode executar vários comandos, através de várias 'janelas de tela'. Isso simplesmente será desconectado se sua conexão SSH pai morrer, mantendo todos os subprocessos em execução dentro dela vivos e bem.
man screen
é seu amigo como de costume, e o pacote do sistema operacional deve ser chamadoscreen
se não estiver instalado por padrão.Os básicos são:
Inicie uma sessão de tela (no seu host remoto):
Desconecte-se da sua sessão de tela: CTRL-A,d
Reconecte-se à sua sessão de tela depois de fazer login novamente:
Abra outra 'janela' de tela: CTRL-A,c
Percorra as janelas da tela aberta: CTRL-A,space
Há muitas coisas legais que você pode fazer com a tela. Uso-o há mais de 10 anos e ainda estou descobrindo novos recursos. É o meu utilitário Unix favorito.
Eu não posso acreditar que ninguém mencionou MOSH ;
Mosh é um protocolo separado que pode se conectar ao processo de login SSH, mantém sua sessão ativa após dias de desconexão, mudança de IP, alta latência e assim por diante. Está explicado na página inicial melhor do que eu posso explicar, então copiei a descrição abaixo. Minhas experiências e conselhos são que eu uso no meu celular Android, é um salva-vidas ao viajar e usar SSH. O mesmo acontece no meu laptop quando conectado ao celular no trem, por exemplo. Eu recomendo compilar da fonte para obter a versão mais recente, a versão repo para mim dentro do Ubuntu tem alguns aborrecimentos que são corrigidos na versão mais recente (no momento da redação).
Funcionalidades do site:
Alterar IP. Permaneça conectado : o Mosh faz roaming automaticamente enquanto você se move entre as conexões de Internet. Use Wi-Fi no trem, Ethernet em um hotel e LTE em uma praia: você permanecerá conectado. A maioria dos programas de rede perde suas conexões após roaming, incluindo SSH e aplicativos da Web como o Gmail. Mosh é diferente.
Proporciona bons sonhos : com o Mosh, você pode colocar seu laptop para dormir e acordá-lo mais tarde, mantendo sua conexão intacta. Se sua conexão com a Internet cair, o Mosh o avisará - mas a conexão será retomada quando o serviço de rede voltar.
Livre-se do atraso de rede : o SSH aguarda a resposta do servidor antes de mostrar sua própria digitação. Isso pode resultar em uma interface de usuário ruim. Mosh é diferente: dá uma resposta instantânea à digitação, exclusão e edição de linha. Ele faz isso de forma adaptativa e funciona mesmo em programas de tela cheia como emacs e vim. Em uma conexão ruim, as previsões pendentes são sublinhadas para que você não seja enganado.
Nenhum código privilegiado. Sem daemon : Você não precisa ser o superusuário para instalar ou executar o Mosh. O cliente e o servidor são executáveis executados por um usuário comum e duram apenas a vida útil da conexão.
Mesmo método de login : Mosh não escuta nas portas de rede nem autentica usuários. O cliente mosh efetua login no servidor via SSH e os usuários apresentam as mesmas credenciais (por exemplo, senha, chave pública) de antes. Em seguida, o Mosh executa o mosh-server remotamente e se conecta a ele via UDP.
Executa dentro do seu terminal, mas melhor : Mosh é um programa de linha de comando, como o ssh. Você pode usá-lo dentro do xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen ou tmux. Mas o mosh foi projetado do zero e suporta apenas um conjunto de caracteres: UTF-8. Ele corrige bugs Unicode em outros terminais e em SSH.
O Control-C funciona muito bem : Ao contrário do SSH, o protocolo baseado em UDP do mosh lida com a perda de pacotes normalmente e define a taxa de quadros com base nas condições da rede. Mosh não preenche buffers de rede, então Control-C
sempre funciona para interromper um processo descontrolado.
autossh observa sua conexão e se ela cair, ela se reconecta. É mais confiável do que keepalives. Se você se conectar a uma sessão de tela, continuará de onde se desconectou (veja
rscreen
que vem com autossh)tmux
Este é um clássico. Use-o sempre que correr o risco de perder a conexão com um terminal.
Assim, você está de volta à ação.
Eu instalaria e iniciaria a tela para corrigir seu problema. A tela permitirá que você se reconecte a uma sessão de tela anterior.
Além disso, o screen também permite que você faça coisas legais como dividir sua tela, visualizar o console etc. Você pode encontrar mais informações aqui e aqui .
Para começar, se você for desconectado, você pode usar
para ver suas sessões e
para reconectar a um desconectado.
Às vezes eu esqueci de rodar a tela também e perdi meu trabalho inacabado. Nesse caso, embora não possamos reconectar a uma sessão SSH quebrada, ainda é possível repaginar um programa em execução para um novo terminal e retomar o que você estava fazendo graças ao
reptyr
.Depois de desconectado acidentalmente de uma sessão SSH, a primeira coisa é executar
screen
para que a conexão não seja interrompida novamente. Em seguida, na nova sessão, executeps aux | grep {The process to be resumed}
para obter o PID. Com o PID, você pode tentarreptyr {PID}
oureptyr -T {PID}
(se houver subprocessos) continuar o trabalho.Embora a tela mantenha sua sessão de shell aberta no servidor remoto se sua sessão ssh cair, ela não fará nada sobre o problema das conexões ssh serem descartadas. Como o zero_r sugere, tente ajustar sua conexão ssh com keep alives e longos tempos limite.
Eu sugiro que você rastreie a causa dos pacotes perdidos que causam os problemas e corrija isso em vez de contornar isso.
Esta resposta ainda é relevante, a tela existe, é suportada, ainda faz o trabalho, etc, mas existem outras alternativas agora: o tmux oferece recursos extras, e tanto ele quanto a tela são mais comumente (na minha experiência) usados embrulhados em Byobu . Todos os três estão disponíveis nos repositórios padrão das principais distribuições Linux.
Como outros apontaram, a tela geralmente é a melhor solução para isso e também adiciona uma série de outros recursos úteis.
Você pode configurar seu perfil na máquina remota para iniciar automaticamente e/ou reconectar à tela no login, o que evita que você esqueça de iniciar a tela uma vez que precisar, pois sofre uma queda de conexão.
Veja http://tlug.dnho.net/?q=node/239 (ou pesquise no Google por muitos outros exemplos feitos de maneiras ligeiramente diferentes).