GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So erkennen Sie, ob eine ssh-ControlMaster-Verbindung verwendet wird

Sie könnten einfach

verwenden
ssh -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?

Linux
  1. So verwenden Sie SSH-Tunneling für den Zugriff auf eingeschränkte Server

  2. Wie kann man eine nicht reagierende SSH-Verbindung unter Linux beenden?

  3. Wie konfiguriere ich Schriftarten auf einer Remote-X-Verbindung (xdmcp vs. Ssh)?

  4. Wie kann man Firefox anweisen, ein anderes Alsa-Gerät zu verwenden?

  5. Wie kann ich SSH mit einem SOCKS 5-Proxy verwenden?

So verwenden Sie SSHFS zum Mounten von Remote-Verzeichnissen über SSH

So zwingen Sie Wget, eine IPv4- oder IPv6-Verbindung zu verwenden

So verwenden Sie SSH, um eine Verbindung zu einem Remote-Server herzustellen

So verwenden Sie einen SSH-Schlüssel mit Nicht-Root-Benutzern

Wie generiert und verwendet man einen SSH-Schlüssel in einem Linux-System?

Wie kann ich die Nutzung der Bandbreite durch jede Verbindung sehen?