O que posso fazer quando minha sessão SSH está parada?

109

Às vezes, minha sessão ssh no terminal trava. Como posso sair da sessão ssh e me reconectar?

Kit Sunde
fonte

Respostas:

196

Digite ~.(ex .: til, ponto) no início de uma linha. Em outras palavras, pressione Enter, então ~, então .. (Em alguns idiomas, pode ser necessário pressionar Shiftou Altpara inserir o ~caractere.)

De um modo geral, o ~caractere é um caractere de escape em uma sessão SSH quando você o digita no início de uma linha. Digite Enterthen ~?para ver a lista de comandos de escape. Os mais comuns são

  • ~. para finalizar a conexão
  • ~^Z(imprensa ~, em seguida, Ctrl+ Z) para suspender a conexão e digitar um comando localmente (executar o comando fgpara retornar à sessão SSH)

Se você deseja um til no início de uma linha, pressione ~duas vezes.

Gilles
fonte
7

Tudo o que você precisa fazer para sair de uma sessão ssh é digitar exitno prompt.

Tente inserir Shift+ `+.

daviesgeek
fonte
2
Não está mais aceitando entrada do usuário, está literalmente parado. No Ubuntu, há uma combinação de teclado que encerra a sessão que você pode usar em casos como estes. Depois de um tempo, a sessão será encerrada, broken-pipemas prefiro não esperar.
Kit Sunde
11
@Kit eu consertei minha resposta. Me desculpe por isso. Eu não sabia que você queria dizer uma sessão SSH completamente paralisada.
daviesgeek
Normalmente, apenas espero o tempo limite. Apesar de conhecer esses comandos, sempre esqueço que posso usá-los para acelerar o processo de recuperação do shell. Observe que a resposta do @Gilles também pode ser necessária para pressionar Enter / Return uma vez antes. ~. Você pode aprender mais na página de manual do SSH (um pouco mais da metade) e digitando: ~?em uma sessão de SSH ativa / conectada, novamente, você pode ter para pressionar enter uma vez antes.
Jason Salaz
7

Se sua sessão for interrompida e o prompt não responder mais, você pode simplesmente matar a instância do Terminal e todos os processos filhos associados a essa instância, dos quais a sua sessão ssh é uma, devem ser encaminhados junto com ela.

Se você realmente quer ser completo, pode abrir uma nova instância do Terminal, procure por sessões ssh na lista de processos e mate-as através da linha de comando:

> ps -ef  |grep ssh
501  1332   142   0 20Dec11 ??         0:01.33 /usr/bin/ssh-agent -l
501 57172 57150   0  1:58pm ttys000    0:00.01 grep ssh
501 57139 57133   0  1:57pm ttys002    0:00.03 ssh -i/Users/ian/code/ec2-keys/id_rsa-gsg-keypair [email protected]

> kill 57139

Se isso não funcionar, tente:

> kill -9 57139

Não mate o ssh-agentprocesso.

Ou você pode abrir o Activity Monitor, procurar sessões e pressionar o botão kill:

Filtragem do Activity Monitor para sessões ssh

Ian C.
fonte
+1, é isso que eu faço. Frequentemente, onde eu deixei uma sessão em execução e, em seguida, a conexão é interrompida acidentalmente ou eu durmo no laptop, faz com que o ssh congele. Eu abrir uma nova guia console e matar o PID do processo de ssh (ou fechar a guia ssh e abrir um novo)
halfer
O uso do atalho de teclado funciona no seu Mac sem interromper o processo de maneira entediante?
Rafael Bugajewski
11
Use ~.. Veja acima.
Snowcrash 04/04
0

~. funciona, embora pareça estar totalmente travado, interrompe a conexão ssh e você pode iniciá-la novamente, mas no meu teclado eu tenho que pressionar Alt + ~ e depois espaço e então.

Hannu
fonte