GNU/Linux >> Tutoriels Linux >  >> Linux

Comment savoir si une connexion ssh ControlMaster est en cours d'utilisation

Vous pouvez simplement utiliser

ssh -o ControlPath=$socket -O check 

pour chaque $socket que vous avez ouvert (facile si vous les gardez dans un seul répertoire).

Cela renvoie 255 si la vérification échoue (la connexion n'est plus active), une autre valeur si elle réussit. Vous devrez peut-être également spécifier le nom d'hôte, mais rien qu'un awk sur $socket ne vous donnera :)


La réponse de @Renik n'a pas fonctionné pour moi. Voir ci-dessous pour ce qui a fait.

Cela fonctionne pour moi en utilisant uniquement le fichier socket pour le maître de contrôle :

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

REMARQUE : Vous pouvez également utiliser ssh -S ~/.ssh/<controlfile> ... ainsi, qui est une forme un peu plus courte de ce qui précède.

Exemple

Voici un exemple où j'ai déjà établi une connexion à un serveur distant :

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

Et avec celui-ci déconnecté :

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

S'il était toujours connecté, cela le forcerait à quitter immédiatement :

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

Ce n'est pas clair pour moi, mais il semblerait qu'il s'agisse potentiellement d'un bogue dans ssh qu'il nécessite un argument supplémentaire à la fin, même si blah n'a pas de sens dans le contexte des commutateurs que j'utilise.

Sans ça me donne ça :

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

Informations sur la version

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

J'ai confirmé que sur ces deux versions, le besoin du faux argument supplémentaire était requis.

Références

  • Comment fermer (tuer) les connexions ssh ControlMaster manuellement
  • Comment quitter le processus maître de contrôle OpenSSH sans utiliser lsof ou fuser ?

Linux
  1. Comment utiliser Fail2ban pour sécuriser SSH sur CentOS 7

  2. Comment augmenter le délai d'expiration de la connexion SSH

  3. Comment vérifier la vitesse de votre connexion ssh

  4. Comment utiliser Ssh-copy-id avec un tunnel Ssh à sauts multiples ?

  5. Comment dire à Firefox d'utiliser un autre appareil Alsa ?

Comment utiliser SSHFS pour monter des répertoires distants sur SSH

Comment forcer Wget à utiliser une connexion IPv4 ou IPv6

Comment utiliser SSH pour se connecter à un serveur distant

Comment utiliser une clé SSH avec des utilisateurs non root

Comment générer et utiliser la clé SSH dans le système Linux ?

comment voir l'utilisation de la bande passante de chaque connexion ?