¿Qué puedo hacer cuando mi sesión SSH está atascada?

A veces, mi sesión ssh en la terminal se cuelga. ¿Cómo puedo salir de la sesión ssh y volver a conectarme?

Respuestas (7)

Escriba ~.(es decir, tilde, punto) al comienzo de una línea. En otras palabras, presione Enter, luego ~, luego .. (En algunos idiomas, es posible que deba presionar Shifto Altpara ingresar el ~carácter).

En términos generales, el ~carácter es un carácter de escape en una sesión SSH cuando lo escribe al principio de una línea. Escriba Enterluego ~?para ver la lista de comandos de escape. Los más comunes son

  • ~.para terminar la conexión
  • ~^Z(presione ~luego Ctrl+ Z) para suspender la conexión y escriba un comando localmente (ejecute el comando fgpara volver a la sesión SSH)

Si desea una tilde al comienzo de una línea, presione ~dos veces.

No tengo idea de por qué no se pregunta en Unix StackExcnage, pero me ayudó con Linix ssh, ¡gracias!
@BogdanMart: ¿Tal vez sea porque macOS tiene más errores? :)
Esto funciona solo si tiene un teclado ANSI, tengo un teclado español y no funciona, en español la tecla "tilde" ~ se hace con AltGr + 4. Pero si cambio el diseño del teclado a inglés, y uso Shift + º, entonces funciona!
@JohanAlexisDuqueCadena No sé qué es un “teclado ANSI” pero no creo que sea relevante. Si su tecla de tilde es una tecla muerta (es decir, al escribir ~no se inserta ~inmediatamente, sino que al escribir, por ejemplo ~, luego se ainserta ã), es posible que deba escribir un espacio después ~para insertar realmente una tilde, luego escriba el segundo carácter. Consulte también apple.stackexchange.com/questions/219603/…
Funciona para mí con distribución de teclado alemán y Alt Gr + +.

Si su sesión está bloqueada y el mensaje ya no responde, simplemente puede eliminar la instancia de Terminal. Todos los procesos secundarios asociados con esa instancia, incluida su sesión ssh, se cierran.

Un enfoque más completo, abra un nuevo shell (nueva pestaña o ventana), enumere las sesiones ssh y envíe señales de finalización:

> ps -ef  |grep ssh
501  1332   142   0 20Dec11 ??         0:01.33 /usr/bin/ssh-agent -l
501 57172 57150   0  1:58pm ttys000    0:00.01 grep ssh
501 57139 57133   0  1:57pm ttys002    0:00.03 ssh -i/Users/ian/code/ec2-keys/id_rsa-gsg-keypair someuser@someinstance.amazonaws.com

> kill 57139

Si eso no funciona, intente:

> kill -9 57139

No elimine los procesos ssh-agento .sshd

O puede abrir el Monitor de actividad y buscar allí sesiones y presionar el botón "Salir del proceso" para ellas:

Filtrado del Monitor de actividad para sesiones ssh

+1, esto es lo que hago. A menudo, cuando dejo una sesión en ejecución, y luego la conexión se interrumpe accidentalmente o suspendo la computadora portátil, hace que ssh se congele. Abro una nueva pestaña de la consola y elimino el PID del proceso ssh (o cierro la pestaña ssh y abro una nueva)
¿El uso del método abreviado de teclado funciona en tu Mac sin matar el proceso de manera tediosa?
uso ~._ Véase más arriba.

Todo lo que necesita hacer para salir de una sesión ssh es escribir exiten el indicador.

Intenta ingresar Shift+ `+.

Ya no acepta la entrada del usuario, está literalmente estancado. En Ubuntu hay una combinación de teclado que termina la sesión que puedes usar en casos como estos. Después de un tiempo la sesión terminará indicando broken-pipepero prefiero no esperar.
@Kit Arreglé mi respuesta. Lo siento por eso. No me di cuenta de que te referías a una sesión SSH completamente estancada.
Por lo general, solo espero a que se agote el tiempo de espera. A pesar de que conozco estos comandos, siempre olvido que puedo usarlos para acelerar el proceso de recuperación de mi caparazón. Tenga en cuenta la respuesta de @Gilles también, es posible que deba presionar Entrar/Regresar una vez antes ~.. Puede obtener más información en la página de manual de SSH (un poco más de la mitad), y al escribir: ~?en una sesión SSH activa/conectada, nuevamente, es posible que tenga para presionar enter una vez antes.

Según la documentación:

 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
 ~V/v - decrease/increase verbosity (LogLevel)
 ~^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.)
Es del comando ~?, solo copia y pega

~. funciona, aunque parece estar totalmente atascado, detiene la conexión ssh y puedes iniciarla de nuevo, pero en mi teclado tengo que presionar Alt+~ luego espacio y luego .

Para mí, al trabajar con Terminal en macOS Mojave 10.14.6, la única solución fue ingresar ~ seguido de Ctrl-Z como se describe en esta respuesta: https://apple.stackexchange.com/a/175670/136875

De la respuesta de Ian en apple.stackexhange, esta es la respuesta para Mac OS X :

La tecla de escape predeterminada para el ssh que se envía con OS X el ~carácter. Debe ingresarlo inmediatamente después de una nueva línea para que ssh lo respete. Y luego la secuencia de teclas Control- zse usa para suspender y poner en segundo plano una tarea en bash.

Así que prueba esta secuencia de teclas:

Return

~

Control-z

Si funciona verás algo como:

myhost.local:~ |ruby-2.2.0|
> ssh someremotehost
Last login: Fri Mar  6 14:15:28 2015 from myhost

someremotehost:~ |ruby-2.2.0|
> ~^Z [suspend ssh]

[1]  + 48895 suspended  ssh myremotehost