Come posso uscire da ssh quando si blocca?


380

Spesso vado a scuola nella mia scatola a casa da scuola, ma di solito quando cambio classe e il mio computer si sospende, la pipa si romperà. Tuttavia, ssh semplicemente blocca - Ctrl+ c, Ctrl+ ze Ctrl+ dnon hanno alcun effetto.

È fastidioso dover riavviare il mio terminale e ancora più fastidioso dover chiudere e ricreare una nuova finestra dello schermo.

Quindi la mia domanda, c'è un modo semplice per far morire correttamente ssh (cioè quando la pipe fallisce "normalmente" uscirà con un messaggio su una pipe rotta)? O devo capire cos'è il PID e ucciderlo manualmente?


Se mi disconnetto da una sessione SSH attiva, si blocca. Lo uccido e inizio una nuova sessione. Nessuna informazione è persa perché utilizzo lo schermo GNU.
Lekensteyn,

Anche a me - lo schermo è il migliore. Ma è ancora fastidioso dover screen -x: P
Wayne Werner il

[mosh] (mosh.mit.edu) è una valida alternativa per evitare questo problema. "Resta connesso" anche con connettività Internet intermittente.
jaynp,

@jaynp Lo svantaggio di me che utilizzo mosh (da due minuti fa) è che non so come disconnetterlo. Sto usando una sessione tmux + irssi su un host remoto (come un buttafuori IRC, una specie di) e voglio disconnettermi a volte (mentre tmux + irssi è in esecuzione) e che ho fatto con <enter> + ~ +. usando SSH ma non funzionerà usando mosh.
Pavel Šimerda,

Risposte:


534

I tasti normali vengono inoltrati durante la sshsessione, quindi nessuno di questi funzionerà. Invece, usa le sequenze di escape. Per uccidere la sessione corrente ha colpito in seguito Enter ↵, ~, ..

Più di queste sequenze di escape possono essere elencati con Enter ↵, ~, ?:

Supported escape sequences:
  ~.  - terminate session
  ~B  - send a BREAK to the remote system
  ~R  - Request rekey (SSH protocol 2 only)
  ~#  - list forwarded connections
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Puoi chiudere l'elenco delle sequenze di escape colpendo enter.

Si noti che poiché colpire ~~provoca sshl'invio di ~invece di intercettarlo, è possibile indirizzare Nssh connessioni nidificate colpendo ~ N volte. (Questo vale solo per le ~s che seguono direttamente una enter.) Vale a dire che enter~~~~~.termina una sshsessione di 5 livelli in profondità e mantiene intatti gli altri 4.


48
Per i layout di tastiera in cui ~è presente un tasto morto , la sequenza di tasti è Enter ~ Space ..
Søren Løvborg,

1
Ho aggiunto più sequenze di escape che potrebbero essere utili. :)
gertvdijk,

5
Nota che devi decommentare la linea EscapeChar ~in /etc/ssh/ssh_config(o ~/.ssh/ssh_configse preferisci).
Aditya MP

6
@Hitechcomputergeek Enter ~ ~ .Poiché ~ ~invia un valore letterale ~attraverso la sessione SSH, la seconda sessione SSH lo riceverà come una singola tilde e interpreterà la .parte come fuga. Per inviare alla quinta sessione ssh nidificata, basta usare 5 tilde nella sequenza di escape.
Score_Under

4
la vita cambia;)
artm

54

È inoltre possibile configurare keep-alive a livello di applicazione per SSH per impedire il blocco dei problemi di connessione. Il mio ~/.ssh/configcontiene questo:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Questo fa in modo che il client ssh invii keep-alive a livello di applicazione ogni 15 secondi. Ogni volta che tre di loro falliscono consecutivamente (impostazione predefinita di ServerAliveCountMax), il client considera la connessione come bloccata e la chiude.

A differenza dell'altra opzione TCPKeepAlive, questa opzione è selezionata all'interno del canale crittografato e non è falsificabile.


È stato notato che quei keep-alive aiutano anche a mantenere vivi i collegamenti a lungo inattivo , vale a dire impedirti di avere sessioni di PCC semichiuse in sospeso per ore intatte.

Consiglio vivamente di attivare questa funzione se ti imbatti regolarmente, ma dovresti anche conoscere il leggero rischio di sicurezza che potrebbe comportare. Un attacco noto in chiaro può diventare più semplice se l'attaccante conosce l'intervallo e il contenuto di una connessione inattiva. Questo potrebbe essere il motivo per cui non è abilitato per impostazione predefinita.


3
Ragioni di sicurezza. Potresti andare a bere qualcosa e lasciare ssh sessio aperto e il tuo partner di laboratorio con cui hai lavorato negli ultimi 20 anni potrebbe usare la tua sessione per dirottare il server e distruggerlo ... mentre bevevi durante la tua pausa di 10 minuti.
Luis Alvarado,

2
@CYREX, eh? E come può essere disattivato dall'opzione predefinita impedirti di avere partner di laboratorio ingiusti? %)
Ulidtko,

1
@ulidtko: c'è qualche motivo per non impostare ServerAliveIntervalsu 1 in modo che una connessione persa venga rilevata immediatamente?
krlmlr

2
@gertvdijk: grazie. Per me, funziona anche senza la Hostlinea. Inoltre, "I cifrari moderni come Advanced Encryption Standard non sono attualmente suscettibili ad attacchi in chiaro." (dal link che hai aggiunto) ...
krlmlr

2
puoi anche sostituire SSH con Mosh (shell mobile). Mosh si connette al server tramite SSH, ma quindi stabilisce un canale basato su UDP resiliente ai problemi di connessione. Mosh ha anche un'eco locale, quindi puoi vedere cosa stai scrivendo, anche se il server non risponde. Quando vengono premuti i tasti, Mosh contrassegna il testo eco. mosh.mit.edu
Pascal Rosin,

41

Come indicato nella risposta di geekosaur, la sequenza di escape ~.interromperà la connessione.

L'elenco completo delle sequenze di escape e ciò che fanno possono essere visualizzati digitando ~?:

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Come posso chiudere l'elenco delle sequenze di escape?
kristianp,

3
Non, dopo aver stampato l'elenco delle sequenze di escape, è pronto ad accettare quello successivo.
Tejas Kale
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.