¿Cómo descongelar el terminal cuando muere la conexión SSH?

5

Estoy usando Mac 10.9.5 con bash shell. Ocasionalmente, cuando ssh en otra máquina y luego la conexión muere (por ejemplo, Internet se cae o me mudo a una nueva ubicación), la ventana del terminal con la sesión abierta de SSH está congelado y la única forma en la que parece poder avanzar es cerrarlo y comenzar una nueva sesión.

¿Hay alguna forma de configurar cosas tales que si la conexión de la sesión de SSH se interrumpe, volveré a mi shell bash normal, como era antes de ejecutar mi comando de SSH?

    
pregunta Dave 06.03.2015 - 23:01

1 respuesta

6

Puedes suspender y luego matar el proceso ssh que está colgado. Para hacer esto, debe emitir la secuencia de escape, suspender el proceso ssh y luego usar kill -9 para finalizar ese proceso.

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

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

Esta línea de salida:

[1]  + 48895 suspended  ssh myremotehost

le indica el ID de proceso del proceso ssh en su máquina. Es 48895 en este ejemplo. Ese proceso todavía se está ejecutando, solo se ha suspendido y se ha implementado un segundo plano. Necesitas matarlo.

Puedes hacerlo con el comando kill . Quieres matarlo con prejuicios, así que usa la opción -9 cuando llames a kill así:

myhost.local:~ |ruby-2.2.0|
> kill -9 48895
[1]  + 48895 killed     ssh someremotehost

Simplemente use el PID de su proceso ssh cuando llame a ese comando en lugar del 48895 PID que usé anteriormente.

Y tendrás tu mensaje de vuelta.

Alternativamente, puede abrir una segunda ventana de Terminal y usar ps para encontrar el proceso ssh en la lista de procesos y emitir la llamada kill -9 contra el PID. Sin embargo, ese tipo de derrotas en el proceso de recuperación de su aviso en la ventana de Terminal original, ¿no?

    
respondido por el Ian C. 06.03.2015 - 23:28

Lea otras preguntas en las etiquetas