Comment puis-je quitter une connexion SSH?

245

Je me connecte à un serveur via SSH pour envoyer un message à un serveur de socket à l'aide d'une commande telle que:

ssh 181.169.1.2 -p 5566

Une fois la connexion établie, le message écrit et envoyé, je ne peux pas quitter le mode texte. Je suis seulement autorisé à entrer plus de texte et c'est tout.

Existe-t-il une commande ou une combinaison de touches me permettant de revenir en mode commande?

Andreea
la source

Réponses:

156

Comment puis-je quitter une connexion SSH?

Deux façons:

  • fermer la session shell, par exemple avec exitsuivi de Enter, ou Ctrl- dvous permet généralement de quitter la sshsession normalement,
  • dans le cas où vous avez une mauvaise connexion et que le shell ne répond pas, appuyez sur la Entertouche, puis tapez ~.et ssh doit immédiatement se fermer et vous ramener à votre invite de commande.

La première option devrait être intuitive, mais comment connaissons-nous cette dernière option?

Nous pourrions apprendre cette information en lisant attentivement la page de manuel.

$ man ssh

nous donne la documentation SSH , qui contient la section suivante sur les caractères d'échappement:

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.
Aaron Hall
la source
Je ne trouve pas la section "Comment connaissons-nous cette" particulièrement utile, parce que pour moi cela implique qu'il existe une sorte de solution évidente à trouver, quand je ne trouve pas cela particulièrement intuitif de vouloir "man ssh "trouver comment se déconnecter. Comment aurais-je trouvé "sortie", par exemple? Je conviens qu’il est bon de réaffirmer la vérification des pages de manuel lorsque vous le pouvez.
Alexander Pritchard
@AlexanderPritchard J'ai mis à jour ma réponse afin de mieux expliquer ce que nous faisons ici. Si vous trouvez la page de manuel difficile à comprendre, si vous avez un problème avec le responsable, ou mieux encore, envoyez une demande d'extraction avec une amélioration (sans réserve).
Aaron Hall
1
Cela semble bien en théorie, mais dans la pratique, de nombreuses personnes ont du mal à comprendre comment naviguer dans ces commandes, car même savoir comment rechercher les informations souhaitées suppose que les personnes n’ont pas le contexte voulu. Le fait de signaler un problème aux responsables et de soumettre des demandes d'extraction avec des améliorations va encore plus loin. Je ne dis pas que les pages de manuel sont utiles, mais si elles étaient aussi utiles que certaines leur paraissent, je n’utiliserais pas Stack Exchange. Je veux être clair. Je pense que votre réponse est bonne et que les gens devraient consulter les pages de manuel, mais elles n’ont pas une utilité globale.
Alexander Pritchard
6
"S'ils étaient aussi utiles que certains semblent le faire, je n'utiliserais pas Stack Exchange." Je suis d'accord et c'est pourquoi j'essaie d'écrire de bonnes réponses. Citer et citer des sources de référence ne doit donner à personne le sentiment d'être stupide ou méchant de ne pas avoir déjà lu cette source, il est fait pour fournir une preuve supplémentaire de ce qui serait autrement une affirmation de fait peut-être démontrable, ainsi que pour informer l'utilisateur les informations pertinentes peuvent être stockées. Vous voulez savoir que vous faites la bonne chose sémantiquement, tout en sachant que cela fonctionne.
Aaron Hall
278

Réponse courte: Type exit

Si cela ne fonctionne pas, cependant ...

Séquence d'échappement et de déconnexion SSH

La plupart des implémentations SSH implémentent un caractère d'échappement pour les sessions interactives, similaire à la Ctrl-]combinaison de telnet . Le caractère d'échappement SSH par défaut est ~, entré au début d'une ligne.

Si vous souhaitez mettre fin à une session interactive OpenSSH bloquée et impossible à quitter en entrant exitou CtrlDdans un shell distant , vous pouvez entrer ~suivie d'un point .. Pour être sûr de saisir le caractère d'échappement au début d'une ligne de saisie, vous devez appuyer d'abord sur Entrée. Donc, la séquence suivante mettra généralement fin à une session SSH:

Enter~.

Autres séquences d'échappement

OpenSSH, par exemple, offre d’autres séquences d’échappement ~.. Entrer ~?pendant une session devrait vous donner une liste. Quelques exemples:

  • ~suivi Ctrl-Zsuspend la session,
  • ~& le met directement en arrière-plan,
  • ~# donne une liste des connexions transférées dans cette session.
  • Si vous voulez simplement entrer un tilde au début d'une ligne, vous devez doubler: ~~.

Le caractère d'échappement peut être modifié à l'aide de l'option de ligne de commande -e. Si vous définissez la valeur spéciale -e none, l'échappement est désactivé et la session est totalement transparente.

Voir aussi la page de manuel OpenBSD sur ssh (référencée sur www.openssh.org ) sous l’ -eoption de ligne de commande

Dubu
la source
2
Pourquoi faire simple quand vous pouvez l'avoir inutilement compliqué?
MariusMatutiae
7
@MariusMatutiae L'OP a demandé un cas où il n'y avait pas de shell distant à entrer exitou Ctrl-Dsimplement un processus d'écoute. J'ai clairement indiqué que ma solution convient à une session bloquée et impossible à quitter . J'ai essayé de clarifier cela plus, en espérant qu'il est plus facile de voir maintenant.
Dubu
5
J'étais sceptique, mais ~.sans espaces, c'était exactement ce dont j'avais besoin, merci! :)
Jamey
2
Dans la configuration du clavier suisse allemand, le tilde est généré en appuyant sur AltGr + ^ (plus une touche de blocage). Pour cette raison, il semble que la séquence d'échappement ne fonctionne pas. Est-ce que quelqu'un sait comment taper le caractère d'échappement par défaut en allemand?
Daniel Alder
4
@Dobu a trouvé la raison pour laquelle cela ne fonctionnait pas auparavant. Si vous avez déjà tapé ~ dans la même ligne (ce qui arrive facilement si vous testez), le texte suivant ~. les séquences sont ignorées. Il a fallu appuyer sur le bouton de retour avant ...
Daniel Alder
32

Voulez-vous quitter le shell SSH?

Vous pouvez taper exitet frapper Enter, ou utiliser Ctrl+D

Jeroen Vermeulen - MageHost
la source
1
"sortie" m'a aidé comme ctrl + d pas travaillé dans le visualiseur VNC ... merci
raj gupta
1
Cela ne fonctionne pas dans les cas où la machine est gelée ou a disparu ou que l'application ne répond à aucune entrée
Daniel Alder
11

Il suffit de taper exitou logout(puis appuyez sur Entrée bien sûr) les deux vont fonctionner.

octa
la source
4

Ce sont les caractères pris en charge qui fournissent diverses options avec lesquelles vous pouvez jouer avec ssh.

Séquences d'échappement prises en charge:

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

(Notez que les échappements ne sont reconnus que immédiatement après une nouvelle ligne.) Vous pouvez fermer la liste des séquences d'échappement en appuyant sur Enter.

0_o
la source
3

Vous pouvez écrire logoutdans la ligne de la console (et frapper Enterbien sûr).

Etienne
la source
1

MacOS : lorsque ssh se bloque, utilisez la séquence suivante:

ENTER 
SHIFT+`
.

où: shift + ` produit ~ (caractère tilde)

Kamil Kiełczewski
la source