GNU/Linux >> Linux Esercitazione >  >> Linux

Come sapere se è in uso una connessione ssh ControlMaster

Potresti semplicemente usare

ssh -o ControlPath=$socket -O check 

per ogni $socket che hai aperto (facile se li mantieni in un'unica directory).

Questo restituisce 255 se il controllo fallisce (connessione non più attiva), un altro valore se passa. Potrebbe essere necessario specificare anche il nome host, ma niente che un awk su $socket non ti dia :)


La risposta di @Renik non ha funzionato per me. Vedi sotto per cosa ha fatto.

Questo funziona per me usando solo il file socket per il master di controllo:

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

NOTA: Puoi anche usare ssh -S ~/.ssh/<controlfile> ... anche, che è una forma un po' più breve di quanto sopra.

Esempio

Ecco un esempio in cui ho già stabilito una connessione a un server remoto:

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

E con esso disconnesso:

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

Se fosse ancora connesso, questo lo costringerebbe a uscire immediatamente:

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

Non mi è chiaro, ma sembrerebbe essere potenzialmente un bug in ssh che richiede un argomento aggiuntivo alla fine, anche se blah non ha senso nel contesto degli switch che sto usando.

Senza di esso mi dà questo:

$ 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]

Informazioni sulla versione

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

Ho confermato che su entrambe queste versioni era richiesta la necessità dell'argomento fasullo aggiuntivo.

Riferimenti

  • Come chiudere (uccidere) le connessioni ssh ControlMaster manualmente
  • Come uscire dal processo master di controllo OpenSSH senza utilizzare lsof o fuser?

Linux
  1. Come aumentare il timeout della connessione SSH

  2. Come controllare la velocità della tua connessione ssh

  3. Come terminare la connessione SSH che non risponde in Linux?

  4. Come configurare i caratteri su una connessione X remota (xdmcp vs. Ssh)?

  5. Come dire a Firefox di utilizzare un altro dispositivo Alsa?

Come utilizzare SSHFS per montare directory remote su SSH

Come forzare Wget a utilizzare la connessione IPv4 o IPv6

Come utilizzare SSH per connettersi a un server remoto

Come utilizzare una chiave SSH con utenti non root

Come generare e utilizzare la chiave SSH nel sistema Linux?

come vedere ogni utilizzo della connessione della larghezza di banda?