¿Cómo puedo salir de ssh cuando se bloquea?

341

Frecuentemente entro a mi caja en casa desde la escuela, pero generalmente cuando cambio de clases y mi computadora se suspende, la tubería se romperá. Sin embargo, ssh simplemente se bloquea - Ctrl + c , Ctrl + z y Ctrl + d no tienen efecto.

Es molesto tener que reiniciar mi terminal, y aún más molesto tener que cerrar y volver a crear una nueva ventana de pantalla.

Entonces, mi pregunta, ¿hay alguna manera fácil de hacer que ssh muera correctamente (es decir, cuando la tubería falla "normalmente" saldrá con un mensaje sobre una tubería rota)? ¿O tengo que averiguar qué es el PID y matarlo manualmente?

    
pregunta Wayne Werner 11.03.2011 - 17:22

3 respuestas

475

Las claves normales se envían a través de la sesión ssh , por lo que ninguna de ellas funcionará. En cambio, usa las secuencias de escape. Para matar la sesión actual, pulse Intro ↵ , ~ , . .

.

Más de estas secuencias de escape se pueden enumerar con Enter ↵ , ~ , ? :

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

Puede cerrar la lista de secuencias de escape presionando enter .

Observe que al pulsar ~ ~ hace que ssh envíe el ~ en lugar de interceptarlo, puede direccionar N anidados ssh conexiones al presionar ~ N veces. (Esto solo se aplica a ~ s que siguen directamente a un enter ). Es decir que ingresa ~ < kbd> ~ ~ ~ ~ . termina una sesión de ssh de 5 capas de profundidad y mantiene los otros 4 intactos.

    
respondido por el geekosaur 11.03.2011 - 18:18
51

Es posible que también desee configurar keep-alives a nivel de aplicación para que SSH evite que se congele en problemas de conexión. Mi ~/.ssh/config contiene esto:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Esto hace que el cliente ssh envíe keep-alives a nivel de aplicación cada 15 segundos. Cada vez que tres de ellos fallan de forma consecutiva (el valor predeterminado es ServerAliveCountMax ), el cliente considera que la conexión está colgada y la cierra.

Opuesto a la otra opción TCPKeepAlive , esto se verifica dentro del canal encriptado y no es spoofable.

Se observa que esos keep-alives también ayudan a mantener activas las conexiones long-idling , es decir, evitan que tengas half-closed tcp sesiones que permanecen intactas durante horas.

Recomiendo activar esta función si se encuentra con esto regularmente, pero también debe saber sobre el ligero riesgo de seguridad que puede suponer. Un ataque conocido de texto plano podría ser más fácil si el atacante conoce el intervalo y el contenido de una conexión inactiva. Esta podría ser la razón por la cual no está habilitada por defecto.

    
respondido por el ulidtko 11.03.2011 - 19:51
39

Como se señala en la respuesta de geekosaur, la secuencia de escape ~. terminará la conexión.

La lista completa de secuencias de escape y lo que hacen se puede mostrar escribiendo ~? :

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.)
    
respondido por el scottl 15.03.2011 - 07:39

Lea otras preguntas en las etiquetas