¿Cómo salgo de una conexión SSH?

245

Me estoy conectando a un servidor a través de SSH para enviar un mensaje a un servidor de socket utilizando un comando como:

ssh 181.169.1.2 -p 5566

Después de establecer la conexión y escribir el mensaje y enviarlo, no puedo salir del modo de texto. Solo se me permite ingresar más texto y listo.

¿Hay un comando o una combinación de teclas que me permita volver al modo de comando?

Andreea
fuente

Respuestas:

156

¿Cómo salgo de una conexión SSH?

Dos caminos:

  • cerrar la sesión de shell, por ejemplo, exitseguido de Enter, o Ctrl- dgeneralmente le permite salir de la sshsesión normalmente,
  • en el caso de que tenga una mala conexión y el shell no responda, presione la Entertecla, luego escriba ~.y ssh debería cerrarse inmediatamente y regresarlo a su símbolo del sistema.

La primera opción debe ser intuitiva, pero ¿cómo sabemos la última opción?

Podríamos aprender esta información de una lectura cuidadosa de la página del manual.

$ man ssh

nos proporciona la documentación de SSH , que tiene la siguiente sección sobre caracteres de 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.
Aaron Hall
fuente
No encuentro la sección "cómo sabemos esto" particularmente útil, porque para mí implica que hay algún tipo de solución obvia para encontrar, cuando no me parece particularmente intuitivo que yo "man ssh "para encontrar cómo desconectarse. ¿Cómo habría encontrado "salir", por ejemplo? Estoy de acuerdo en que es bueno reafirmar la comprobación de las páginas de manual cuando pueda.
Alexander Pritchard
@AlexanderPritchard He actualizado mi respuesta para explicar más cuidadosamente lo que estamos haciendo aquí. Si la página del manual le resulta difícil de entender, presente un problema al responsable del mantenimiento o, mejor aún, envíe una solicitud de extracción con una mejora (sin dudas buena).
Aaron Hall
1
Eso suena bien en teoría, pero en la práctica, muchas personas luchan por descubrir cómo navegar por estos comandos porque incluso saber cómo buscar la información que desea supone un contexto que las personas no tienen. Presentar un problema con los mantenedores y enviar solicitudes de extracción con mejoras va mucho más allá. No sostengo que las páginas de manual sean útiles, pero si fueran tan útiles como algunos las hacen parecer, no estaría usando Stack Exchange. Quiero ser claro, creo que su respuesta está bien, y que las personas deben consultar las páginas de manual, pero no son muy útiles.
Alexander Pritchard
66
"Si fueran tan útiles como algunos los hacen parecer, no estaría usando Stack Exchange". Estoy de acuerdo, y es por eso que trato de escribir buenas respuestas. Citar y citar fuentes de referencia no es para hacer que alguien se sienta tonto o malo por no haber leído ya de esa fuente, se hace para proporcionar más evidencia de lo que de otra manera sería una afirmación de hecho demostrable, así como informar al usuario dónde más Se puede almacenar información relevante. Desea saber que está haciendo semánticamente lo correcto, además de saber que funciona.
Aaron Hall
278

Respuesta corta: tipo exit

Si eso no funciona, sin embargo ...

Carácter de escape SSH y secuencia de desconexión

La mayoría de las implementaciones de SSH implementan un carácter de escape para sesiones interactivas, similar a la Ctrl-]combinación de telnet . El carácter de escape SSH predeterminado es ~, ingresado al comienzo de una línea.

Si desea finalizar una sesión interactiva de OpenSSH que está atascada y no se puede salir ingresando exito CtrlDen un shell en el lado remoto , puede ingresar ~seguido de un punto .. Para asegurarse de ingresar el carácter de escape al comienzo de una línea de entrada, primero debe presionar Enter. Entonces, la siguiente secuencia terminará en la mayoría de los casos una sesión SSH:

Enter~.

Otras secuencias de escape

OpenSSH, por ejemplo, ofrece otras secuencias de escape además ~.. Entrar ~?durante una sesión debería darte una lista. Algunos ejemplos:

  • ~seguido Ctrl-Zsuspende la sesión,
  • ~& lo pone directamente en segundo plano,
  • ~# da una lista de conexiones reenviadas en esta sesión.
  • Si desea simplemente añada una tilde al comienzo de una línea, hay que hacer doble que: ~~.

El carácter de escape se puede cambiar usando la opción de línea de comando -e. Si establece el valor especial -e none, el escape se deshabilita y la sesión es totalmente transparente.

Consulte también la página de manual de OpenBSD en ssh (a la que se hace referencia desde www.openssh.org ) en la -eopción de línea de comando

Dubu
fuente
2
¿Por qué hacerlo simple cuando puedes tenerlo inútilmente complicado?
MariusMatutiae
77
@MariusMatutiae El OP solicitó un caso donde no había un shell remoto para ingresar exito Ctrl-D, sino solo un proceso de escucha. Dije claramente que mi solución es adecuada para una sesión que está atascada y no se puede salir . Traté de aclarar esto más, espero que sea más fácil de ver ahora.
Dubu
55
Era escéptico, pero ~.sin espacios era exactamente lo que necesitaba, ¡gracias! :)
Jamey
2
En el diseño de teclado alemán suizo, tilde se genera presionando AltGr + ^ (además es una tecla de bloqueo). Debido a esto, parece que la secuencia de escape no funciona. ¿Alguien sabe cómo escribir el escape predeterminado en alemán suizo?
Daniel Alder
44
@Dobu encontró la razón por la que no funcionaba antes. Si ya escribió ~ en la misma línea (lo que sucede fácilmente si está probando), lo siguiente ~. Se ignoran las secuencias. Tuve que presionar regresar primero ...
Daniel Alder
32

¿Quieres salir del shell SSH?

Puede escribir exity presionar Enter, o usar Ctrl+D

Jeroen Vermeulen - MageHost
fuente
1
"salir" me ayudó porque ctrl + d no funcionaba en el visor VNC ... gracias
raj gupta
1
Esto no funciona en casos donde la máquina se congeló o desapareció o la aplicación no responde a ninguna entrada
Daniel Alder
11

Simplemente escriba exito logout(luego presione Intro, por supuesto) ambos funcionarán.

octa
fuente
4

Estos son los personajes compatibles que proporcionan varias opciones con las que puedes jugar con ssh.

Secuencias de escape compatibles:

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

(Tenga en cuenta que los escapes se reconocen solo inmediatamente después de una nueva línea). Puede cerrar la lista de secuencias de escape presionando Enter.

0_o
fuente
3

Puede escribir logouten la línea de la consola (y presionar, Enterpor supuesto).

Etienne
fuente
1

MacOS : cuando ssh se cuelga, use la siguiente secuencia:

ENTER 
SHIFT+`
.

donde: shift + ` produce ~ (carácter tilde)

Kamil Kiełczewski
fuente