Como ssh em conexões lentas / esquisitas?

20

Estou lidando com uma conexão shell muito lenta. Está na nuvem e estou muito longe do servidor. Às vezes, minha conexão também é interrompida, pois é pela Internet e também posso estar usando Wifi ou 3G compartilhado. Existe uma maneira de ver o que eu digito instantaneamente? Tentar digitar comandos e esperar por cada personagem é atroz.

Zumbis
fonte
4
Use "tela" para manter sua sessão ativa, para que você possa se reconectar quando se desconectar.
precisa saber é o seguinte

Respostas:

24

Tente Mosh .

Mosh (shell móvel)
Aplicativo de terminal remoto que permite roaming, suporta conectividade intermitente e fornece eco local inteligente e edição de linha das teclas do usuário.

Mosh é um substituto para o SSH. É mais robusto e responsivo, especialmente através de links Wi-Fi, celular e de longa distância.

Mosh é um software gratuito, disponível para GNU / Linux, FreeBSD, Solaris, Mac OS X e Android.

dmourati
fonte
3
Advertências para mosh: (1) é muito mais intensivo em CPU do que ssh. (2) Se sua sessão mosh não terminar normalmente, você terá uma conexão vazada que nunca poderá ser restabelecida. (Preciso limpar minha caixa de shell, caso contrário, haverá dezenas de processos em execução).
user606723
Outra questão é que é quase impossível instalar na distribuição Linux como Suse (SLES). Passei horas tentando instalá-lo como um pacote openSuse ou compilando-o da fonte.
Zombies
$ Sudo zypper no mosh (monitores segundo os docs)
dmourati
Sim, isso funcionará bem no openSuse, mas em uma distribuição corporativa / fechada, é muito difícil instalar novos projetos de código aberto.
Zombies
10

uma alternativa (e também além) à resposta do dmourati: use screenou tmuxou outras coisas, para manter as sessões vivas quando você estiver desconectado. (Você simplesmente se reconectará à sessão após reconectar e verá o terminal como o deixou, mesmo com programas em tela cheia [vi, etc]). Também possui muitos outros benefícios (sessões de compartilhamento com colegas de trabalho etc.) (como no próprio FAQ da Mosh, ele afirma:

P: Por que o buffer de rolagem do meu terminal está incompleto?

Mosh 1.2 sincroniza apenas o estado visível do terminal. O Mosh 1.3 terá suporte completo ao scrollback; veja esse problema e os outros que estão vinculados a partir daí. Por enquanto, a solução alternativa é usar o screen ou tmux no lado remoto.

E você também deve usar rsyncpara copiar arquivos, sem precisar reenviar as partes já enviadas pela rede quando a conexão acabar.

Olivier Dulac
fonte
2

Você deve ver onde estão os latentes / gargalos. Você deve tentar obter melhor acesso à infraestrutura ... localmente ou ao lado do provedor. Você envolve suas sessões importantes ou críticas em tmuxou screenmultiplexadores ...

Por favor, dê-nos números. É preciso uma conexão particularmente ruim para que sessões simples de SSH tenham problemas ... Eu tive que acessar sistemas do outro lado do mundo a partir de um avião através de uma VPN e ainda não tive muitos problemas. Esse é um problema persistente? O que traceroutete diz?

ewwhite
fonte
O problema ocorre muito no wifi do hotel, onde há poucos roteadores e muitos dispositivos / laptops compartilhando o acesso à Internet. Também o wifi compartilhado do hotel é inerentemente bastante ruim com tempos de ping, pois atravessar 1 ou mais paredes realmente adiciona muito atraso à ms. Esse também é outro grande gargalo. Situação semelhante ocorre no 3G, onde essa distância da torre de telefonia celular acrescenta MS. Ao usar shells SSH, tenho que esperar por cada caractere. Um MS de 200-400 pode ser bastante irritante, mas com picos de até 1 segundo ... ai.
Zombies
1

Para futuros leitores deste tópico, a dica de @lowellheddings em seu blog , juntamente com o uso da tela , pode ajudar a superar esse problema:

Você pode configurar o cliente ssh para enviar automaticamente um código de código no-op de protocolo a cada número de segundos, para que o servidor não o desconecte. Essa configuração às vezes é chamada de Manter ativo ou Parar de desconectar tanto em outros clientes.
Adicione a seguinte linha ao arquivo / etc / ssh / ssh_config:
ServerAliveInterval 60
...

Snidhi Sofpro
fonte