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 em que estamos trabalhando separadamente; entretanto, 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 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.
linux
ssh
gnu-screen
cavalo pálido
fonte
fonte
Respostas:
UPDATE: Para obter uma resposta real, consulte a resposta de zero_r abaixo
Esta não é uma resposta, mas uma solução alternativa. Use a tela .
Quando você faz login pela primeira vez, execute a tela. Você obtém outro shell, executa comandos nisso. 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 as opções acima devem solucionar o seu problema.
fonte
screen
já estava instalado no meu Ubuntu 12.x isso, se você não tem certeza apenas tentar este comando, ele se reconectar e retomar o do-release-upgrade processo: Tela sudo -D -rsudo
deve ser usado apenas se a sessão de tela original tiver sido iniciada com sudo. Caso contrário, ele retornará como se não houvesse sessão de tela:There is no screen to be detached
screen -r
era exatamente o que eu estava procurando.Tente definir ClientAliveInterval (por exemplo, 60) e TCPKeepAlive (yes ou no) como valores apropriados no servidor sshd.conf.
Isso deve manter sua sessão ativa, mesmo que a conexão se perca por alguns minutos.
fonte
Como mencionado acima, o GNU Screen é o caminho a seguir. Isso permitirá 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 desanexará se a conexão SSH principal morrer, mantendo todos os subprocessos em execução ativos e ativos.
'
man screen
' é seu amigo, como sempre, e o pacote do SO deve ser chamado 'screen
' se não estiver instalado por padrão.Noções básicas são:
Inicie uma sessão de tela (no seu host remoto):
Desligar da sua sessão de tela: CTRL-A,d
Reconecte-se à sua sessão na tela depois de fazer login novamente:
Abrir outra tela 'janela': CTRL-A,c
Ciclo através de você tela janelas abertas: CTRL-A,space
Há muitas coisas legais que você pode fazer com o Screen. Uso-o há mais de 10 anos e ainda estou descobrindo novos recursos. É o meu utilitário Unix favorito.
fonte
Não acredito que ninguém tenha mencionado o 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 página inicial melhor do que posso explicar, por isso copiei a descrição abaixo. Minhas experiências e conselhos são de que eu uso no meu celular Android, é um salva-vidas ao viajar e fazer SSH. O mesmo acontece no meu laptop quando conectado ao celular no trem, por exemplo. Eu recomendo a compilação do código-fonte para obter a versão mais recente, a versão repo para mim no Ubuntu tem alguns aborrecimentos que são corrigidos na versão mais recente (no momento em que escrevo).
Recursos do site:
Alterar IP. Mantenha-se conectado : o Mosh faz roaming automaticamente conforme você se move entre as conexões com a Internet. Use Wi-Fi no trem, Ethernet em um hotel e LTE na praia: você permanecerá conectado. A maioria dos programas de rede perde suas conexões após o roaming, incluindo SSH e aplicativos da Web como o Gmail. Mosh é diferente.
Cria bons sonhos : com o Mosh, você pode colocar seu laptop em repouso e acordá-lo mais tarde, mantendo sua conexão intacta. Se a sua conexão à Internet cair, o Mosh o alertará - mas a conexão continuará quando o serviço de rede voltar.
Livre-se do atraso na rede : o SSH aguarda a resposta do servidor antes de mostrar sua própria digitação. Isso pode criar uma interface de usuário ruim. Mosh é diferente: fornece uma resposta instantânea à digitação, exclusão e edição de linhas. 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 estã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 : o Mosh não escuta nas portas de rede ou 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 servidor mosh remotamente e se conecta a ele pelo UDP.
É executado dentro do seu terminal, mas melhor : o 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 no SSH.
O Control-C funciona muito bem : ao contrário do SSH, o protocolo baseado em UDP da mosh lida com a perda de pacotes normalmente e define a taxa de quadros com base nas condições da rede. O Mosh não preenche os buffers da rede; portanto, o Control-C
sempre trabalha para interromper um processo descontrolado.
fonte
O autossh observa sua conexão e, se ela cair, é reconectada. É mais confiável do que keepalives. Se você se conectar a uma sessão de tela, continuará exatamente de onde se desconectou (veja o
rscreen
que vem com o autossh)fonte
rscreen
para isso.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.
fonte
Eu instalaria e iniciaria a tela para corrigir seu problema. 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 a tela, visualizar o console etc. Você pode encontrar mais informações aqui e aqui .
Para iniciantes, se você for desconectado, poderá usar
para ver suas sessões e
reconectar a um desconectado.
fonte
Como outros já 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-se à tela no login, o que evita que você esqueça de iniciar a tela na única vez que precisar, porque sofre uma queda na conexão.
Consulte http://tlug.dnho.net/?q=node/239 (ou pesquise no Google por muitos outros exemplos que são diferentes).
fonte
uma alternativa mais moderna à tela, infelizmente não disponível para alguns tipos de "virtualização" (por exemplo, no cygwin você pode ter "tela", mas não "tmux" devido à maneira como foi projetado), mas sempre que você tiver a opção de instalar o tmux , Eu recomendo vivamente que escolha um instante de tela.
fonte
Aqui está outra solução sem tela.
A bandeja de massa permite que você faça exatamente isso, tem uma opção de reconexão e desconexão que não está em uso regular ou em massa
https://puttytray.goeswhere.com/
é uma bifurcação (completamente aberta) de massa de vidraceiro com outras opções, acesse as configurações de conexão e existem 2 opções, uma para 'tentativa de reconectar-se com falha de conexão' e 'tentativa de reconectar-se na inicialização'.
fonte
Embora a tela mantenha sua sessão shell aberta no servidor remoto se a sessão ssh cair, ela não fará nada sobre o problema de queda das conexões ssh. Como 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-os em vez de contorná-los.
fonte
À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, é possível reparar novamente um programa em execução em um novo terminal e retomar o que você estava fazendo
reptyr
.Depois de desconectar acidentalmente de uma sessão SSH, a primeira coisa a fazer é 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.fonte