Domanda Come posso uscire da ssh quando si blocca?


Frequento spesso la ssh nella mia scatola a casa da scuola, ma di solito quando cambio classe e il mio computer si interrompe, il tubo si spezzerà. Tuttavia, ssh si blocca semplicemente - Ctrl+c, Ctrl+z e Ctrl+d non ha alcun effetto

È fastidioso dover riavviare il mio terminale, e ancor più fastidioso dover chiudere e ricreare una nuova finestra sullo schermo.

Quindi la mia domanda, c'è un modo semplice per far sì che ssh muoia correttamente (ad esempio quando il pipe fallisce "normalmente" uscirà con un messaggio su un tubo rotto)? O devo capire che cos'è il PID e ucciderlo manualmente?


343
2018-03-11 16:22


origine


Se mi sono disconnesso da una sessione SSH attiva, si blocca. Lo uccido e inizio una nuova sessione. Nessuna informazione è persa perché utilizzo lo schermo GNU. - Lekensteyn
Anche io - lo schermo è il migliore. Ma è ancora fastidioso doverlo fare screen -x : P - Wayne Werner
[mosh] (mosh.mit.edu) è un'alternativa pulita per evitare questo problema. "Rimane connesso" anche con la connettività Internet intermittente. - jaynp
@jaynp Lo svantaggio di me usando mosh (da due minuti fa) è che non so come disconnetterlo. Sto usando una sessione di tmux + irssi su un host remoto (come un bouncer IRC, una sorta di) e voglio disconnettermi a volte (mantenendo il funzionamento di tmux + irssi) e che ho fatto con <enter> + ~ +. usando SSH ma non funzionerà usando mosh. - Pavel Šimerda


risposte:


I normali tasti vengono inoltrati su ssh sessione, quindi nessuno di questi funzionerà. Invece, usa le sequenze di escape. Per uccidere successivamente il successo della sessione corrente Inserire ↵, ~, ..

È possibile elencare più di queste sequenze di escape con Inserire ↵, ~, ?:

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 premendo accedere.

Notare questo perché colpire ~~ cause ssh inviare il ~ puoi intercettarlo invece di intercettarlo N nidificato ssh connessioni colpendo ~  N volte. (Questo vale solo per ~s che seguono direttamente un accedere.) Vale a dire quello accedere~~~~~. termina un ssh Sessione 5 livelli profondi e mantiene intatti gli altri 4.


478
2018-03-11 17:18



Per i layout di tastiera dove ~ è un chiave morta, la sequenza di tasti è Enter  ~  Space  .. - Søren Løvborg
Io ho aggiunto più delle sequenze di escape che potrebbero essere utili. :) - gertvdijk
Si noti che è necessario rimuovere il commento dalla linea EscapeChar ~ in /etc/ssh/ssh_config (o ~/.ssh/ssh_config se preferisci). - Aditya M P
@Hitechcomputergeek Enter  ~  ~  . Da ~  ~ manda un letterale ~ attraverso la sessione SSH, la seconda sessione SSH la riceverà come una singola tilde e interpreterà il . come parte della fuga. Per inviare alla quinta sessione ssh annidata, basta usare 5 tilde nella sequenza di escape. - Score_Under
cambio vita ;) - artm


Potresti anche voler impostare il livello dell'applicazione keep-alive per SSH a impedire da congelamento su problemi di connessione. Mio ~/.ssh/config contiene questo:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Questo fa ssh client inviare keep-alive a livello dell'applicazione ogni 15 secondi. Ogni volta che tre di loro falliscono consecutivamente (il default di ServerAliveCountMax), il client considera la connessione come bloccata e la chiude.

Opposto all'altra opzione TCPKeepAlive, questo è verificato all'interno del canale crittografato e non è spoofable.


Si nota che anche quelli keep-alive aiutano a, uhm, mantenere A lungo al minimo connessioni vive, cioè ti impediscono di avere semichiusi sessioni di PCP appese per ore intatte.

Consiglio vivamente di attivare questa funzione se ci si imbatte regolarmente, ma si dovrebbe anche conoscere il lieve rischio di sicurezza che potrebbe imporre. UN attacco con testo in chiaro potrebbe diventare più facile 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.


51
2018-03-11 18:51



Ragioni di sicurezza. Potresti andare a bere e lasciare aperto il ssh sessio e il tuo compagno di laboratorio con cui hai lavorato negli ultimi 20 anni potrebbe usare la tua sessione per dirottare il server e distruggerlo ... mentre bevevi durante i tuoi 10 minuti di pausa. - Luis Alvarado♦
@ CYREX, eh? E come può disattivare l'opzione predefinita per evitare di avere partner di laboratorio ingiusti? %) - ulidtko
@ulidtko: C'è qualche motivo per non impostare ServerAliveInterval a 1 in modo che venga immediatamente rilevata una connessione persa? - krlmlr
Io ho migliorato il post con la mia conoscenza su di esso insieme ad altre "correzioni". Penso che non lo sia il rispondere alla domanda in quanto si tratta più di prevenire piuttosto che fissarne uno già rotto. - gertvdijk
@gertvdijk: Grazie. Per me, funziona anche senza il Host linea. Inoltre, "i codici moderni come Advanced Encryption Standard non sono attualmente suscettibili di attacchi con testo in chiaro". (dal link che hai aggiunto) ... - krlmlr


Come notato nella risposta di geekosaur, la sequenza di fuga ~. terminerà la connessione.

L'elenco completo delle sequenze di escape e quello 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.)

39
2018-03-15 06:39



Come posso chiudere l'elenco delle sequenze di escape? - kristianp
Non, dopo aver stampato l'elenco delle sequenze di escape, è pronto ad accettare il successivo. - Tejas Kale