Come uscire da una connessione SSH?


245

Mi sto collegando a un server tramite SSH per inviare un messaggio a un server socket utilizzando un comando come:

ssh 181.169.1.2 -p 5566

Dopo aver stabilito la connessione e aver scritto il messaggio e inviarlo, non posso uscire dalla modalità testo. Mi è permesso solo inserire più testo e basta.

Esiste un comando o una combinazione di tasti che mi consente di tornare alla modalità comando?

Risposte:


156

Come uscire da una connessione SSH?

Due strade:

  • chiudendo la sessione della shell, ad esempio con exitseguito da Enter, oppure Ctrl- di dsolito consente di uscire sshnormalmente dalla sessione,
  • nel caso in cui si abbia una connessione errata e la shell non risponde, premere il Entertasto, quindi digitare ~.e ssh dovrebbero chiudersi immediatamente e tornare al prompt dei comandi.

La prima opzione dovrebbe essere intuitiva, ma come facciamo a sapere quest'ultima opzione?

Potremmo imparare queste informazioni da un'attenta lettura della pagina man.

$ man ssh

ci fornisce la documentazione SSH , che contiene la seguente sezione sui caratteri di escape:

ESCAPE CHARACTERS
     When a pseudo-terminal has been requested, ssh supports a number of
     functions through the use of an escape character.

     A single tilde character can be sent as ~~ or by following the tilde by
     a character other than those described below.  The escape character
     must always follow a newline to be interpreted as special.  The escape
     character can be changed in configuration files using the EscapeChar
     configuration directive or on the command line by the -e option.

     The supported escapes (assuming the default ‘~’) are:

     ~.      Disconnect.

     ~^Z     Background ssh.

     ~#      List forwarded connections.

     ~&      Background ssh at logout when waiting for forwarded connection
             / X11 sessions to terminate.

     ~?      Display a list of escape characters.

     ~B      Send a BREAK to the remote system (only useful if the peer sup‐
             ports it).

     ~C      Open command line.  Currently this allows the addition of port
             forwardings using the -L, -R and -D options (see above).  It
             also allows the cancellation of existing port-forwardings with
             -KL[bind_address:]port for local, -KR[bind_address:]port for
             remote and -KD[bind_address:]port for dynamic port-forwardings.
             !command allows the user to execute a local command if the
             PermitLocalCommand option is enabled in ssh_config(5).  Basic
             help is available, using the -h option.

     ~R      Request rekeying of the connection (only useful if the peer
             supports it).

     ~V      Decrease the verbosity (LogLevel) when errors are being written
             to stderr.

     ~v      Increase the verbosity (LogLevel) when errors are being written
             to stderr.

Non trovo particolarmente utile la sezione "come facciamo a saperlo", perché per me implica che esiste una sorta di soluzione ovvia da trovare, quando non trovo particolarmente intuitivo che "man ssh "per scoprire come disconnettersi. Come avrei trovato "exit", ad esempio? Sono d'accordo che è bene riaffermare il controllo delle pagine man quando è possibile.
Alexander Pritchard,

@AlexanderPritchard Ho aggiornato la mia risposta per spiegare più attentamente cosa stiamo facendo qui. Se trovi difficile capire la pagina man, inoltra un problema con il manutentore o, ancora meglio, invia una richiesta pull con un miglioramento (assolutamente non buono).
Aaron Hall,

1
In teoria suona bene, ma in pratica molte persone fanno fatica a capire come navigare questi comandi perché anche sapere come cercare le informazioni desiderate presuppone che le persone non abbiano un contesto. La presentazione di un problema con i manutentori e l'invio di richieste pull con miglioramenti va oltre. Non sostengo che le pagine man siano utili, ma se fossero così definitivamente utili come alcuni sembrano farle, non utilizzerei Stack Exchange. Voglio essere chiaro, penso che la tua risposta vada bene e che le persone dovrebbero controllare le pagine man, ma non sono del tutto utili.
Alexander Pritchard,

6
"se fossero definitivamente utili come alcuni sembrano, non utilizzerei Stack Exchange." Sono d'accordo, ed è per questo che provo a scrivere buone risposte. Citando e citando fonti di riferimento non si deve far sentire nessuno stupido o non aver letto per quella fonte, si fa per fornire ulteriori prove di ciò che sarebbe altrimenti un'affermazione di fatto forse dimostrabile, oltre a informare l'utente dove più le informazioni pertinenti possono essere archiviate. Vuoi sapere che stai facendo semanticamente la cosa giusta, oltre a sapere che funziona.
Aaron Hall,

278

Risposta breve: digitare exit

Se non funziona, tuttavia ...

Carattere di escape SSH e sequenza di disconnessione

La maggior parte delle implementazioni di SSH implementano un carattere di escape per sessioni interattive, simile alla Ctrl-]combinazione di telnet . Il carattere di escape SSH predefinito è ~, inserito all'inizio di una riga.

Se si desidera terminare una sessione interattiva OpenSSH che è bloccata e non può essere chiusa immettendo exito CtrlDin una shell sul lato remoto , è possibile inserire ~seguito da un punto .. Per essere sicuri di inserire il carattere di escape all'inizio di una riga di input, devi prima premere Invio. Quindi la seguente sequenza nella maggior parte dei casi terminerà una sessione SSH:

Enter~.

Altre sequenze di escape

OpenSSH, ad esempio, offre altre sequenze di escape oltre a ~.. L'accesso ~?durante una sessione dovrebbe fornire un elenco. Qualche esempio:

  • ~seguito Ctrl-Zsospende la sessione,
  • ~& lo mette direttamente in background,
  • ~# fornisce un elenco di connessioni inoltrate in questa sessione.
  • Se si desidera immettere semplicemente una tilde all'inizio di una riga, bisogna raddoppiarlo: ~~.

Il carattere di escape può essere modificato utilizzando l'opzione della riga di comando -e. Se si imposta il valore speciale -e none, l'escaping è disabilitato e la sessione è completamente trasparente.

Vedi anche la pagina man di OpenBSD su ssh (a cui si fa riferimento da www.openssh.org ) sotto l' -eopzione della riga di comando


2
Perché renderlo semplice quando puoi averlo inutilmente complicato?
MariusMatutiae,

7
@MariusMatutiae L'OP ha chiesto un caso in cui non vi fosse alcuna shell remota da inserire exito Ctrl-D, ma solo un processo di ascolto. Ho affermato chiaramente che la mia soluzione è adatta per una sessione bloccata e che non può essere chiusa . Ho cercato di chiarire di più questo, spero che sia più facile da vedere ora.
Dubu,

5
Ero scettico, ma ~.senza spazi era esattamente ciò di cui avevo bisogno, grazie! :)
Jamey,

2
Nel layout di tastiera tedesco svizzero, la tilde viene generata premendo AltGr + ^ (più è un tasto di blocco). Per questo motivo, sembra che la sequenza di escape non funzioni. Qualcuno sa come digitare la fuga predefinita in tedesco svizzero?
Daniel Alder,

4
@Dobu Trovato il motivo per cui non ha funzionato prima. Se hai già digitato ~ nella stessa riga (cosa che si verifica facilmente se stai testando), quanto segue ~. le sequenze vengono ignorate. Prima ho dovuto premere return ...
Daniel Alder,

32

Vuoi uscire dalla shell SSH?

Puoi digitare exite premere Entero utilizzare Ctrl+D


1
"exit" mi ha aiutato poiché ctrl + d non funzionava nel visualizzatore VNC ... grazie
raj gupta,

1
Questo non funziona nei casi in cui la macchina si è congelata o scomparsa o l'applicazione non risponde a nessun input
Daniel Alder,

11

Basta digitare exito logout(quindi premere Invio ovviamente) entrambi funzioneranno.


4

Questi sono i personaggi supportati che offrono varie opzioni con cui puoi giocare con ssh.

Sequenze di escape supportate:

 ~.  - 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

(Si noti che gli escape sono riconosciuti solo immediatamente dopo una nuova riga.) È possibile chiudere l'elenco delle sequenze di escape colpendo Enter.


3

Puoi scrivere logoutnella riga di console (e Enterovviamente colpire ).


1

MacOS : quando si blocca ssh, utilizzare la seguente sequenza:

ENTER 
SHIFT+`
.

dove: shift + ` produce ~ (carattere tilde)

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.