salir de todas las conexiones SSH en un comando y cerrar PuTTY

18

¿Hay alguna manera de retroceder en todas las conexiones SSH y cerrar PuTTY en "one shot"? Trabajo en Windows 7 y uso PuTTY para SSH en varios hosts Linux.

Un ejemplo de la forma en que me encuentro trabajando:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
banjer@host1:~> exit
Putty closes.

Según lo anterior, ¿alguna forma de pasar de host8 a cerrar PuTTY de una sola vez? A veces me encuentro hasta 5 o 10 hosts de profundidad. Me doy cuenta de que puedo hacer clic en la X para cerrar la ventana PuTTY, pero me gusta asegurarme de que mis conexiones SSH se cierren correctamente mediante el comando de salida. También me doy cuenta de que estoy pidiendo consejos sobre cómo aumentar la pereza. Simplemente lo escribiré como "¿cómo puedo ser más eficiente"?

Banjer
fuente
66
No directamente lo que está preguntando, pero ¿qué tal simplemente presionar ctrl+dvarias veces?
Ulrich Dangel
@UlrichDangel Nunca he usado eso antes, pero también es una forma rápida de cerrar las conexiones rápidamente.
Banjer
2
¿Estás realmente anidando sesiones ssh de 5 a 10 niveles de profundidad? ¿Te das cuenta de que está creando un túnel complicado que rebota todos los paquetes en tu sesión ssh a través de todos esos hosts? ¿Podría hacer que el problema desaparezca simplemente no anidando sesiones ssh?
jw013
@ jw013 No, no me di cuenta de eso, pero tiene sentido. Honestamente, 5-10 niveles era una exageración, pero estaba tratando de ilustrar mi pregunta de "cómo salir limpiamente de Putty de una sola vez".
Banjer

Respuestas:

29

Intente usar la sshsecuencia de escape de terminación de conexión.

En la sshsesión, ingrese ~.(tilde dot). No verá los caracteres cuando los escriba, pero la sesión finalizará de inmediato.

$ ~.
$ Connection to me.myhost.com closed.  

Desde man 1 ssh

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 for SSH protocol
         version 2 and if the peer supports 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 remote port-forwardings using 
         -KR[bind_address:]port.  !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 for SSH protocol 
         version 2 and if the peer supports it).
George M
fuente
¡Muy genial! ¿Alguna forma de poner ~.un alias o función? Solo para darle un nombre fácil de recordar exitall. Ahora estoy pidiendo demasiado :). Intenté algunas cosas en ~/.bashrcpero obtener -bash: ~.: command not found. Supongo que bash lo ve como una cadena y no como una secuencia de escape que proviene directamente del teclado.
Banjer
También me gusta la ctrl+dsolución, pero esto responde mi pregunta más directamente. Gracias a todos.
Banjer
3
@Banjer bash nunca ve ~., se maneja sshsolo.
Gilles 'SO- deja de ser malvado'
@Gilles gotcha, tiene sentido.
Banjer
Y no hay garantía de que PuTTY también haga esto. El sshcliente CLI necesita esta técnica porque es CLI. PuTTY es una aplicación GUI y hay formas mucho más fáciles de usar para hacer esto en una GUI.
Alexios
11

Simplemente presione CtrlDy se cerrará la sesión para mantener presionada la tecla Ctrl y presione "d" hasta que la ventana desaparezca.

Joe
fuente
1
Lamentablemente, esto no funciona universalmente. Es probable que se ignore cualquier sesión que ejecute un editor u otra herramienta de pantalla completa EOT. E incluso bashlo ignorará en medio de una línea de comando. Pruébelo usted mismo: escriba una sola letra e inténtelo Ctrl-D.
Alexios
¿Qué hace Ctrl + D, es decir, si existe de forma segura o simplemente mata el proceso?
AMB
Sale con seguridad. Es un acceso directo de shell que es lo mismo que escribir 'salir' y presionar enter.
Joe
En realidad, el problema mío (windows git bash y ubuntu bash) a logout.
velis
Sí, creo que exit también llama a cerrar sesión ya que las conexiones ssh no suelen ser sesiones de inicio de sesión.
Joe
9

Simplemente cierre PuTTY. ( Alt+ F4por defecto IIRC.)

Gilles 'SO- deja de ser malvado'
fuente
2

Otra forma es hacer functionpara ssh:

   function ssh(){ /usr/bin/ssh $@ ; exit ; } 

Desafortunadamente, siempre cerrará la conexión y cerrará sesión desde la consola después de que termine de trabajar en el sistema remoto.

Tenga en cuenta que debe realizar dicha función en todos sus servidores, de lo contrario, este truco no funcionará. Por cierto, siempre puede poner la función en ~ / .bashrc o ~ / .whatever_shell_you_use_rc.

Parece un truco un poco sucio en comparación con la forma de uther.

prisa
fuente
functionno es POSIX: simplemente elimine la palabra clave, y necesita citar $@correctamente, o sus argumentos se pasarán después de la división de palabras (incorrecta).
Chris Down
2

O podría usar execpara reemplazar su proceso de shell sshcuando salte a otro host:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> exec ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
Putty closes.

5 niveles de profundidad no es bonito, ya que el tráfico pasará a través de todos los demás servidores. Por eso no recomiendo simplemente matar a PuTTY o ssh (~.), Ya que (dependiendo de lo que hagas) esto podría resultar en procesos huérfanos en los servidores.

Es mejor tratar de ser menos "vago". Hacer clic derecho en la barra de título de puttys hace que abrir una nueva sesión sea rápido. Si tiene un servidor "predeterminado" y acepta 1 salto, la función "Duplicar sesión" es muy útil. Especialmente cuando se usa la autenticación de pubkey.

MattBianco
fuente
2

Si no le importa hacer una pequeña secuencia de comandos, puede hacerlo.

Script: myssh.sh

#!/bin/bash
ssh $1
if [ $? -eq 5 ]; then
 exit 5
fi

Llamar a través del comando punto:

$ . myssh [email protected]

Si quieres salir de un nivel:

$ exit

Si quieres salir de todo:

$ exit 5
Ladrón de luna
fuente
Por supuesto, deberías copiarlo en cada computadora desde la que puedas enviar ssh. Además, ¿no sería más fácil definir una función de shell llamada ssh? Eso evitaría el período anterior, etc.
etherfish
-1

Escribir cierre de sesión en la ventana de terminal de masilla lo hace por mí:

richard@forevermore:~ > logout

Cierra la conexión ssh y cierra la aplicación Putty.

Ricardo
fuente
Creo que no leíste la pregunta correctamente. OP lo hace ssh host1, y luego, de lo host1hace ssh host8. En ese momento, a logoutharía lo mismo que el exitcomando que ya conocen: salir host8y volver a colocarlos host1.
G-Man dice 'Restablece a Monica' el
Ok, ya veo, mi mal.
Richard