Cosa posso fare quando la mia sessione SSH è bloccata?


109

A volte la mia sessione SSH nel terminale si blocca. Come posso uscire dalla sessione ssh e riconnettermi?

Risposte:


196

Digitare ~.(es. Tilde, punto) all'inizio di una riga. In altre parole, premere Enter, quindi ~, quindi .. (In alcune lingue, potrebbe essere necessario premere Shifto Altper inserire il ~carattere.)

In generale, il ~personaggio è un personaggio di escape in una sessione SSH quando lo si digita all'inizio di una riga. Digita Enterquindi ~?per visualizzare l'elenco dei comandi di escape. I più comuni sono

  • ~. per terminare la connessione
  • ~^Z(premere ~quindi Ctrl+ Z) per sospendere la connessione e digitare un comando localmente (eseguire il comando fgper tornare alla sessione SSH)

Se vuoi una tilde all'inizio di una riga, premi ~due volte.


7

Tutto ciò che devi fare per uscire da una sessione ssh è digitare exital prompt.

Prova a inserire Shift+ `+.


2
Non accetta più l'input dell'utente, è letteralmente bloccato. Su Ubuntu c'è una combinazione di tasti che termina la sessione che puoi usare in casi come questi. Dopo un po 'la sessione terminerà dichiarando broken-pipema preferisco non aspettare.
Kit Sunde

1
@Kit Ho corretto la mia risposta. Mi dispiace per quello. Non mi ero reso conto che intendevi una sessione SSH completamente bloccata.
daviesgeek,

Di solito aspetto solo il timeout. Nonostante io sia a conoscenza di questi comandi, dimentico sempre che posso usarli per accelerare il processo di recupero della mia shell. Nota anche la risposta di @Gilles, potresti dover premere Invio / Invio una volta prima di ~. poter saperne di più nella manpage SSH (un po 'più a metà), e digitando: ~?in una sessione SSH attiva / connessa, potresti avere di nuovo premere invio una volta prima.
Jason Salaz,

7

Se la sessione è sospesa e il prompt non risponde più, è possibile semplicemente terminare l'istanza Terminal e tutti i processi figlio associati a tale istanza, di cui la sessione ssh è una, dovrebbero essere eliminati.

Se vuoi davvero essere accurato anche se puoi aprire una nuova istanza di Terminal, cerca le sessioni ssh nell'elenco dei processi e uccidile tramite la riga di 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 someuser@someinstance.amazonaws.com

> kill 57139

Se non funziona, prova:

> kill -9 57139

Non uccidere il ssh-agentprocesso.

Oppure puoi aprire Activity Monitor e cercare lì le sessioni e premere il pulsante di interruzione per loro:

Filtro di Activity Monitor per sessioni ssh


+1, questo è quello che faccio. Spesso quando ho lasciato una sessione in esecuzione, e poi o la connessione si interrompe accidentalmente o dormo il laptop, provoca il congelamento di ssh. Apro una nuova scheda della console e uccido il PID del processo ssh (o chiudo la scheda ssh e ne apro una nuova)
halfer

L'uso della scorciatoia da tastiera funziona sul tuo Mac senza uccidere noiosamente il processo?
Rafael Bugajewski,

1
Usa ~.. Vedi sopra.
Snowcrash

0

~. funziona, anche se sembra essere completamente bloccato, interrompe la connessione ssh e puoi riavviarlo, ma nella mia tastiera devo premere Alt + ~ quindi lo spazio e quindi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.