GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo saber si una conexión ssh ControlMaster está en uso

Simplemente podría usar

ssh -o ControlPath=$socket -O check 

por cada $socket que haya abierto (fácil si los guarda en un solo directorio).

Esto devuelve 255 si la verificación falla (la conexión ya no está activa), otro valor si pasa. Es posible que también deba especificar el nombre de host, pero nada que un awk en $socket no le proporcione :)


La respuesta de @Renik no funcionó para mí. Vea a continuación lo que hizo.

Esto funciona para mí usando solo el archivo de socket para el maestro de control:

$ ssh -o ControlPath=~/.ssh/<controlfile> -O check <bogus arg>

NOTA: También puedes usar ssh -S ~/.ssh/<controlfile> ... también, que es una forma un poco más corta de lo anterior.

Ejemplo

Aquí hay un ejemplo en el que ya he establecido una conexión a un servidor remoto:

$ ssh -S ~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check blah
Master running (pid=89228)
$

Y con él desconectado:

$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O check blah
Control socket connect(/Users/user1/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74): No such file or directory
$

Si todavía estuviera conectado, esto lo obligaría a salir de inmediato:

$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O exit blah
Exit request sent.
$

No me queda claro, pero parece que podría tratarse de un error en ssh que requiere un argumento adicional al final, aunque blah no tiene sentido en el contexto de los interruptores que estoy usando.

Sin me da esto:

$ ssh -S ~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port]
           [-Q cipher | cipher-auth | mac | kex | key]
           [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [[email protected]]hostname [command]

Información de la versión

OSX
$ ssh -V
OpenSSH_6.9p1, LibreSSL 2.1.8
CentOS 7.x
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

Confirmé que en ambas versiones, se requería la necesidad del argumento falso adicional.

Referencias

  • Cómo cerrar (matar) conexiones ssh ControlMaster manualmente
  • ¿Cómo salir del proceso maestro de control de OpenSSH sin usar lsof o fuser?

Linux
  1. Cómo usar túneles SSH para acceder a servidores restringidos

  2. ¿Cómo configurar fuentes en una conexión X remota (xdmcp Vs. Ssh)?

  3. ¿Cómo usar Ssh-copy-id con túnel Ssh de múltiples saltos?

  4. ¿Cómo mantener abierto un túnel SSH de manera confiable?

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

Cómo usar SSHFS para montar directorios remotos sobre SSH

Cómo forzar a Wget a usar una conexión IPv4 o IPv6

Cómo usar SSH para conectarse a un servidor remoto

Cómo usar una clave SSH con usuarios no root

¿Cómo generar y usar la clave SSH en el sistema Linux?

¿Cómo ver el uso de ancho de banda de cada conexión?