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


Me estoy conectando a un servidor a través de SSH para enviar un mensaje a un servidor de socket usando 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 puedo ingresar más texto y eso es todo.

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


183


origen




Respuestas:


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

Dos caminos:

  • cerrar la sesión de shell, p. con exit seguido por Entrar, o Ctrl-re por lo general le permite salir de la ssh sesión normalmente
  • en el caso de que tenga una mala conexión y el shell no responda, presione el Entrar tecla, luego escribe ~. y ssh debe 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 da 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.

63



No creo que la sección "¿cómo sabemos esto?" Sea particularmente útil, porque para mí implica que hay algún tipo de solución obvia para encontrar, cuando no me resulta particularmente intuitivo que "hombre ssh" "para encontrar cómo desconectarse". ¿Cómo habría encontrado "exit", por ejemplo? Estoy de acuerdo en que es bueno reafirmar la verificación de las páginas man cuando sea posible. - Alexander Pritchard
@AlexanderPritchard He actualizado mi respuesta para explicar más detenidamente lo que estamos haciendo aquí. Si encuentra que la página del manual es difícil de entender, presente un problema al responsable del mantenimiento, o incluso mejor, envíe una solicitud de extracción con una mejora (no calificativamente buena). - Aaron Hall
Eso suena bien en teoría, pero en la práctica, muchas personas luchan por descubrir cómo navegar estos comandos porque incluso saber cómo buscar la información que se desea supone un contexto que las personas no tienen. La presentación de un problema con los encargados de mantenimiento y la presentación de solicitudes de extracción con mejoras va más allá de esto. No defiendo que las páginas de manual sean útiles, pero si fueran tan definitivamente útiles como algunas las hacen parecer, no estaría utilizando Stack Exchange. Quiero ser claro, creo que su respuesta es buena, y que las personas deben consultar las páginas de manual, pero no son muy útiles. - Alexander Pritchard
"si fueran tan definitivamente ú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 hacer que nadie se sienta tonto o mal por no haber leído ya esa fuente, sino que se hace para proporcionar evidencia adicional de lo que de otro modo sería una afirmación de hecho demostrable, así como para informar al usuario dónde más la información relevante puede ser almacenada. Desea saber que está haciendo semánticamente lo correcto, además de saber que funciona. - Aaron Hall


Respuesta corta: Tipo exit

Si eso no funciona, sin embargo ...

Secuencia de desconexión y carácter de escape SSH

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

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

Entrar~.

Otras secuencias de escape

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

  • ~ seguido Ctrl-Z suspende la sesión,
  • ~& lo pone directamente en el fondo,
  • ~# da una lista de conexiones reenviadas en esta sesión.
  • Si desea simplemente ingresar una tilde al comienzo de una línea, debe duplicarla: ~~.

El carácter de escape se puede cambiar utilizando la opción de línea de comando -e. Si configura el valor especial -e none, el escape está deshabilitado y la sesión es completamente transparente.

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


254



¿Por qué hacerlo simple cuando puedes tenerlo inútilmente complicado? - MariusMatutiae
@MariusMatutiae El OP pidió un caso donde no había un shell remoto para ingresar exit o Ctrl-D, pero solo un proceso de escucha. Declaré claramente que mi solución es adecuada para una sesión que está atascado y no se puede salir. Traté de aclarar esto más, espero que sea más fácil de ver ahora. - Dubu
Yo era escéptico, pero ~. sin espacios era exactamente lo que necesitaba, ¡gracias! :) - Jamey
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
@Dobu Encontró la razón por la cual no funcionó antes. Si ya escribió ~ en la misma línea (lo que sucede fácilmente si está realizando una prueba), lo siguiente ~. las secuencias son ignoradas Tuve que presionar regresar primero ... - Daniel Alder


¿Quieres salir del shell SSH?

Puedes escribir exit y golpear Entrar, o usar Ctrl+re 


33



"exit" me ayudó como ctrl + d no funcionó en VNC viewer ... gracias - raj gupta
Esto no funciona en los casos en que la máquina se congelaba o desaparecía o la aplicación no respondía a ninguna entrada - Daniel Alder


Sólo tipo exit o logout (luego presiona Enter por supuesto) ambos funcionarán.


11





Puedes escribir logout en la línea de la consola (y golpear Entrar por supuesto).


4





Veo que la pregunta está respondida adecuadamente, pero me gustaría añadir que veo que se está conectando a este servidor a través de ssh en el puerto 5566. Lo leí una vez este sitio que la comunicación a través de SSH en puertos no privilegiados (siendo todo por encima de 1023) no es seguro.

Cuando está conectado a un sistema como usuario no root (cualquiera que no sea uid 0), no puede crear una lista de puertos TCP o UDP por debajo de 1024. Esto se debe a que los números de puerto por debajo de 1024 son puertos llamados privilegiados y solo pueden ser abierto por la raíz o los procesos que se ejecutan como raíz. Entonces, por ejemplo, cuando su servidor web (apache, nginx, etc.) se inicie, lo hará como el usuario raíz privilegiado para abrir una conexión de escucha al puerto 80 (el puerto que por defecto se usará para el tráfico HTTP). Ahora, tan pronto como se abre el puerto y se hace todo lo que se debe hacer como root, el servidor web recurrirá a un usuario sin privilegios (ya sea www-data, apache o nobody user). Desde ese punto, cuando algo malo está sucediendo, solo se limita a los derechos que tiene ese usuario. Ahora, volvamos a SSH: cuando iniciamos SSH en el puerto 22, sabemos con certeza que esto se hace por root o por un proceso raíz, ya que ningún otro usuario podría abrir ese puerto. ¿Pero qué sucede cuando movemos SSH al puerto 2222? Este puerto se puede abrir sin una cuenta con privilegios, lo que significa que puedo escribir un script simple que escuche el puerto 2222 e imite a SSH para capturar sus contraseñas. 

Entonces, cuando cambio el puerto, siempre uso un puerto por debajo de 1024 que ya no está siendo utilizado por otro software estándar. Hay una buena lista en Wikipedia para esto.

El autor del artículo también cree que cambiar el puerto SSH no debería hacerse en absoluto por razones de compatibilidad.

Otro problema: muchas empresas tienen firewalls entrantes y salientes, lo que significa que no puede ir a ningún sitio a ningún puerto aleatorio y esperar que funcione. Algunos puertos seguros, como el puerto 22 a menudo están exentos de eso, mientras que otros puertos como el puerto 25 o 110 están bloqueados.

Personalmente, creo que hay casos de uso en los que resulta útil. Por ejemplo, cuando usted o un grupo pequeño de personas es el único que se conecta al servidor a través de SSH, registra los ataques automáticos de fuerza bruta y desea mantener limpio el registro.


4



Claro ... Aunque es un montón de texto y no quería spam. :) Pero tu argumento es bueno. - Ogier Schelvis
Según mi experiencia, lo que estás escribiendo aquí es parcialmente correcto, pero sí, todo el mundo debería considerar estos hechos sobre los puertos reservados; de todos modos, ese no era el problema aquí. ¡Gracias por tu respuesta, sin embargo! - Andreea
Si hay una parte que no está bien, tengo curiosidad por saber qué es. - Ogier Schelvis
Solo te daré el primero: no debes usar un puerto por debajo de 1024; la lista de puertos usados ​​comienza en cero. Se recomienda usar puertos superiores al 63737. Pero debe considerar el hecho de que si no tiene instalado en su servidor, por ejemplo, Polipo que usa el puerto 8123, es aceptable usarlo, hasta que se instale el polipo (y entonces nadie recuerda cambiar el puerto: P) - Andreea
Esto es lo que puede estar mal: la preocupación que se describe es alguien que realiza un ataque local. Es de esperar que los administradores que hayan iniciado sesión en dispositivos de infraestructura clave sean de confianza. Hay muchos más puertos por encima de 1024 que por debajo. Por lo tanto, ocultar un servicio en un puerto más alto puede ayudar a prevenir / retrasar que los escáneres de puertos remotos se centren en los puertos más utilizados. Si alguien está escaneando puertos superiores, un IDS puede activar una alerta (y quizás implementar técnicas IPS). Limitar a <1024 restringe a tus defensores (administradores locales de confianza) y reduce las cosas para el vector de ataque más probable y menos confiable: remoto - TOOGAM


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

Secuencias de escape admitidas:

 ~.  - 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 al golpear Entrar.


3





Mac OS: cuando ssh cuelga, use la siguiente secuencia:

ENTER 
SHIFT+`
.

dónde: shift + `  produce ~ (personaje de tilde)


1