Como posso evitar que uma sessão SSH seja interrompida no OS X Terminal?

84

Quando eu feche meu MacBook com uma sessão SSH ativa no Terminal e depois ativá-la, o prompt não responde.

Em cerca de cinco minutos, diz

Write failed: Broken pipe

e termina.

Isso também acontece quando eu não digite qualquer coisa no Terminal em cerca de quinze minutos.

Posso forçar o OS X a:

  1. Mantenha a conexão SSH viva por mais tempo possível
  2. Mate-o imediatamente uma vez que se torna indiferente

?

Dan
fonte

Respostas:

105

Para manter a conexão viva , você pode fazer check-in /etc/ssh/ssh_config a linha onde diz ServerAliveInterval, que informa com que freqüência (em segundos) seu computador enviará um pacote nulo para manter a conexão ativa. Se você tem um 0 lá que indica que o seu computador não está tentando manter a conexão viva (ele está desabilitado), caso contrário, ele diz com que freqüência (em segundos) ele está enviando o pacote acima mencionado. Tente colocar em 120 ou 240, se ainda está matando sua conexão, você pode ir mais baixo, talvez para 5, se com esse número isso não acontecer, talvez seja o seu roteador que está descarregando a conexão para liberar memória.

Para matá-lo quando ele é desligado , você pode usar o caractere de escape ssh:

~.

Ou seja, pressione o til e, em seguida, o período, se não funcionar, pressione Enter antes de pressionar o botão, o que eliminará a conexão imediatamente.

Jorge Núñez
fonte
2
Ok, você pode matar a conexão com ~., ótima dica! Mas o que isso realmente faz?
CousinCocaine
A única coisa que eu estava confuso era se eu tinha ou não que reiniciar o sshd, mas parece que apenas sair da sessão e reconectar fez o truque
dgig
Muitas vezes o ~. não funciona para mim por vários minutos. Por que é que?
Sridhar-Sarnobat
2
A localização de ssh_config é /etc/ssh/ssh_config no Mac OS X. Eu mesmo editaria a resposta, mas não tenho representante suficiente neste site para fazer isso.
Erik B
devo colocar isso no cliente ou no servidor? Eu acho cliente, mas pode ser mais claro.
EralpB
18

Você pode:

Configure seu sistema, em todo o sistema, para todas as conexões Editando: / etc / ssh / ssh_config E adicione a linha:

ServerAliveInterval 10

Ou por servidor ~ / .ssh / config

Host keepsdroppingme.com
   ServerAliveInterval 10

O que isso basicamente faz envia pacote keep alive, a cada 10 segundos ...

Aleksandar Pavić
fonte
8

Você também pode tentar usar o incrível projeto mosh . Ele manipulará graciosamente as perdas de rede, máquinas que irão adormecer, etc e, felizmente, restaurará a conexão quando você tiver uma rede funcionando novamente.

Outra solução mais consagrada pelo tempo é usar tmux na máquina remota. Nesse caso, você ainda pode obter um cano quebrado, mas se você reconectar seu shell e os aplicativos estarão aguardando exatamente quando você os deixou.

BinaryPaean
fonte
Na verdade, é exatamente isso que estou fazendo agora.
Dan
3

As várias respostas aqui estão em conflito em relação ao caminho exato para os arquivos de configuração. Talvez seja diferente em diferentes unixes? Sugiro ler as páginas do manual em seu sistema!

Em homem ssh (1) , procure por texto: config . No meu sistema, eu tenho uma escolha de arquivos de configuração do sistema ou deste usuário (e os caminhos são estranhamente diferentes).

Em homem ssh_config (5) , procure por texto: vivo . No meu sistema, parece que eu preciso definir ambos ServerAliveInterval e ServerAliveCountMax .

O que funcionou para mim, no macOS 10.12 Sierra, é colocar as duas linhas seguintes em ~ / .ssh / config:

ServerAliveInterval 20
ServerAliveCountMax 180

Agora eu posso ssh para o meu servidor Ubuntu 16.04 sem desconexão por 20 * 180 segundos = 1 hora. Fez o meu dia!

Jerry Krinock
fonte
2

Reconectar automaticamente ssh após o sono ou interrupção wi-fi

  1. Instalar autossh de MacPorts ou Homebrew: brew install autossh

  2. Abra o Terminal e execute autossh -M 20000 -f [SSH ARGUMENTS GO HERE]

  3. Desconecte seu wifi ou coloque seu Mac para dormir.

  4. Quando você se reconectar a wifi, a sessão ssh será automaticamente reconectada.


Automaticamente ssh após o login

Jon Stacey escreveu uma postagem no blog sobre a ativação automática de um ssh sessão quando você faz o login.

  1. Instalar autossh de MacPorts ou Homebrew: brew install autossh

  2. Criar um Fluxo de trabalho do Automator com um script bash.

Automator shell script

  1. Vamos para itens de login em Preferências do Sistema .

System Preferences > Login items

  1. Adicione o seu Fluxo de trabalho do Automator para Itens de login .

Login items

Kamil Slowikowski
fonte
1

Adicione estas duas linhas para /etc/ssh/ssh_config:

ServerAliveInterval 60
TCPKeepAlive yes
MOHRE
fonte