Sie könnten einfach
verwendenssh -o ControlPath=$socket -O check
für jeden $socket, den Sie geöffnet haben (einfach, wenn Sie sie in einem einzigen Verzeichnis aufbewahren).
Dies gibt 255 zurück, wenn die Prüfung fehlschlägt (Verbindung nicht mehr aktiv), einen anderen Wert, wenn sie bestanden wird. Möglicherweise müssen Sie auch den Hostnamen angeben, aber nichts, was Ihnen ein awk auf $socket nicht geben würde :)
@Reniks Antwort hat bei mir nicht funktioniert. Siehe unten für was.
Dies funktioniert für mich, indem ich nur die Socket-Datei für den Steuermaster verwende:
$ ssh -o ControlPath=~/.ssh/<controlfile> -O check <bogus arg>
HINWEIS: Sie können auch ssh -S ~/.ssh/<controlfile> ...
verwenden auch, was eine etwas kürzere Form des Obigen ist.
Beispiel
Hier ist ein Beispiel, wo ich bereits eine Verbindung zu einem entfernten Server aufgebaut habe:
$ ssh -S ~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check blah
Master running (pid=89228)
$
Und damit getrennt:
$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O check blah
Control socket connect(/Users/user1/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74): No such file or directory
$
Wenn es noch verbunden wäre, würde dies es zum sofortigen Beenden zwingen:
$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O exit blah
Exit request sent.
$
Es ist mir unklar, aber es scheint möglicherweise ein Fehler in ssh
zu sein dass am Ende ein zusätzliches Argument erforderlich ist, obwohl blah
ist im Zusammenhang mit den von mir verwendeten Schaltern bedeutungslos.
Ohne gibt es mir das:
$ 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]
Versionsinfo
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
Ich habe bestätigt, dass in beiden Versionen das zusätzliche falsche Argument erforderlich war.
Referenzen
- Manuelles Schließen (Kill) von ssh ControlMaster-Verbindungen
- Wie beendet man den OpenSSH-Control-Master-Prozess, ohne lsof oder fuser zu verwenden?