Como se reconectar a uma sessão ssh desconectada

143

Existe uma maneira de se conectar a uma sessão ssh que foi desconectada? Estamos tendo problemas com nossa conexão de rede para um site remoto em que 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 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 ...) que eu preciso voltar ao invés de reiniciar se possível.

    
por palehorse 04.06.2009 / 15:04

11 respostas

128

UPDATE: Para uma resposta real, veja a resposta do zero_r abaixo

Esta não é uma resposta, mas uma solução alternativa. Use a 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 o seu shell e os processos que ele está executando não caiam. Quando você se reconectar, execute 'screen -r' para continuar.

Há muito mais para configurar e usar a tela, mas as informações acima devem solucionar seu problema.

    
por 04.06.2009 / 15:08
118

Tente definir ClientAliveInterval (por exemplo, 60) e TCPKeepAlive (sim ou não) como 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.

    
por 04.06.2009 / 15:08
60

Como mencionado acima, o GNU Screen é o caminho a seguir. Ele permitirá que você tenha uma 'sessão de tela' na caixa remota na qual você pode executar vários comandos, através de múltiplas 'janelas de tela'. Isso simplesmente será desanexado se a conexão SSH pai for interrompida, mantendo todos os subprocessos funcionando dentro dela, vivos e bem.

' man screen ' é seu amigo como sempre, e o pacote do sistema operacional deve ser chamado de ' screen ' se não for instalado por padrão.

Noções básicas são:

  • Inicie uma sessão de tela (no seu host remoto):

    $ screen
    
  • Desconecte-se da sua sessão de tela: CTRL − A , d

  • Reconecte-se à sua sessão de tela depois de fazer login novamente:

    $ screen -d -r
    
  • Abra outra tela 'window': CTRL − A , c

  • Percorra as janelas de tela aberta: CTRL-A , espaço

Existem lotes de coisas legais que você pode fazer com o Screen. Eu tenho usado por mais de 10 anos, e ainda estou descobrindo novos recursos. É o meu utilitário Unix favorito.

    
por 04.06.2009 / 15:19
42

Não acredito que ninguém tenha mencionado MOSH ;

O Mosh é um protocolo separado que pode ser conectado ao processo de login do SSH, ele mantém sua sessão ativa após dias de desconexão, alteração de IP, alta latência e assim por diante. É explicado na home page melhor do que eu posso explicar, então eu copiei a descrição abaixo. Minhas experiências e conselhos são que eu uso no meu celular Android, é uma economia de vida quando se viaja e SSH'ing. O mesmo é verdade no meu laptop quando conectado com o celular no trem, por exemplo. Eu recomendo compilar a partir da fonte para obter a versão mais recente, a versão do repo para mim dentro do Ubuntu tem alguns aborrecimentos nele que são corrigidos na versão mais recente (no momento da escrita).

Mosh (mobile shell)

Remote terminal application that allows roaming, supports intermittent connectivity, and provides intelligent local echo and line editing of user keystrokes.

Mosh is a replacement for SSH. It's more robust and responsive, especially over Wi-Fi, cellular, and long-distance links.

Mosh is free software, available for GNU/Linux, FreeBSD, Solaris, Mac OS X, and Android.

Recursos do site:

  • Alterar IP. Fique ligado : Mosh automaticamente vaga enquanto você se move entre 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 perdem suas conexões após o roaming, incluindo SSH e Web aplicativos como o Gmail. Mosh é diferente.

  • Realiza bons sonhos : Com Mosh, você pode colocar seu laptop para dormir e acordá-lo mais tarde, mantendo o seu conexão intacta. Se a sua conexão com a Internet cair, Mosh irá avisá-lo - mas o a conexão é retomada quando o serviço de rede retorna.

  • Livre-se do atraso da rede : O SSH aguarda a resposta do servidor antes de mostrar sua própria digitação. Isso pode contribuir para interface do usuário ruim. Mosh é diferente: dá uma resposta instantânea à digitação, exclusão e edição de linha. Ele faz isso de forma adaptável e funciona até mesmo em tela cheia programas 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. Nenhum 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 pela duração da conexão.

  • O mesmo método de login : Mosh não escuta portas de rede nem autentica usuários. O cliente mosh efetua login no o servidor via SSH e os usuários apresentam as mesmas credenciais (por exemplo, senha, chave pública) como antes. Em seguida, Mosh executa o mosh-server remotamente e se conecta a ele por meio do UDP.

  • Funciona 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 mosh foi projetado a partir do zero e suporta apenas um conjunto de caracteres: UTF-8. Ele corrige bugs Unicode em outros terminais e no SSH.

  • O Control-C funciona muito bem : Ao contrário do SSH, o protocolo baseado em UDP de mosh manipula a perda de pacotes normalmente e define o quadro taxa baseada em condições de rede. Mosh não preenche os buffers de rede, então o Control-C
    sempre trabalha para deter um processo de fuga.

por 24.11.2013 / 14:01
19

autossh assiste a sua conexão e, se ela cair, será reconectada. É mais confiável que os keepalives. Se você se conectar a uma sessão de tela, continuará do ponto em que se desconectou (consulte rscreen que vem com o autossh)

    
por 06.06.2009 / 11:11
9

Eu instalaria e começaria a tela para corrigir seu problema. A tela permitirá que você se reconecte a uma sessão de tela anterior.

Além disso, a tela também permite que você faça coisas legais, como dividir sua tela, ver o console etc. Você pode encontrar mais informações aqui e aqui .

Para começar, se você for desconectado, poderá usar

screen -ls

para ver suas sessões e

screen -r ${session} 

para reconectar a um desconectado.

    
por 04.06.2009 / 15:06
9

tmux

Este é um clássico. Use-o sempre que correr o risco de perder a conexão com um terminal.

$ tmux
$ sh do_something_that_takes_forever

!! Connection fails so you reconnect once you notice

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0

Assim, você está de volta à ação.

    
por 06.04.2016 / 03:24
3

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 e / ou reconectar automaticamente a tela no login, o que evita que você esqueça de iniciar a tela toda vez que precisar, porque sofre uma queda de conexão.

Veja o link (ou pesquise no Google por muitos outros exemplos de maneiras ligeiramente diferentes).

    
por 04.06.2009 / 15:47
2

uma alternativa mais moderna à tela, que não está disponível para alguns tipos de "virtualização" (por exemplo, no cygwin você pode ter "screen", mas não "tmux" devido à maneira como foi projetada), mas onde quer que você tenha a opção para instalar o tmux, eu recomendo strongmente ir para aquele insted de tela.

    
por 23.03.2012 / 12:44
2

Aqui está outra solução sem tela.

Putty tray permite que você faça exatamente isso, ele tem uma reconexão na opção de desconexão que não está em regular ou putty-ng

link

é um fork do putty com outras opções, vá para configurações de conexão e há duas opções, uma para 'tentar se reconectar na falha de conexão' e 'tentar se reconectar na inicialização'.

    
por 20.01.2015 / 11:08
1

Enquanto a tela manterá sua sessão de shell aberta no servidor remoto se sua sessão ssh falhar, ela não fará nada sobre o problema das conexões ssh serem descartadas. Como o zero_r sugere, tente sintonizar sua conexão ssh com keep alives e long timeouts.

Sugiro que você rastreie a causa dos pacotes perdidos que estão causando os problemas e corrija isso em vez de trabalhar com eles.

    
por 04.06.2009 / 15:33