Můžete jednoduše použít
ssh -o ControlPath=$socket -O check
za každý $socket, který jste otevřeli (snadné, pokud je budete mít v jednom adresáři).
Toto vrátí 255, pokud kontrola selže (připojení již není aktivní), jinou hodnotu, pokud projde. Možná budete muset zadat také název hostitele, ale nic, co vám awk na $socket nedá :)
Odpověď @Renika pro mě nefungovala. Co udělal, viz níže.
Funguje to pro mě pouze s použitím souboru soketu pro řídicí master:
$ ssh -o ControlPath=~/.ssh/<controlfile> -O check <bogus arg>
POZNÁMKA: Můžete také použít ssh -S ~/.ssh/<controlfile> ...
také, což je trochu kratší forma výše uvedeného.
Příklad
Zde je příklad, kdy jsem již navázal připojení ke vzdálenému serveru:
$ ssh -S ~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check blah
Master running (pid=89228)
$
A s odpojeným:
$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O check blah
Control socket connect(/Users/user1/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74): No such file or directory
$
Pokud by byl stále připojen, bylo by to nuceno jej okamžitě ukončit:
$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O exit blah
Exit request sent.
$
Není mi to jasné, ale zdá se, že to může být chyba v ssh
že vyžaduje další argument na konci, i když blah
je v kontextu přepínačů, které používám, bezvýznamné.
Bez toho mi dává toto:
$ 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]
Informace o verzi
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
Potvrdil jsem, že na obou těchto verzích byla potřeba další falešný argument.
Odkazy
- Jak ručně ukončit (ukončit) připojení ssh ControlMaster
- Jak ukončit hlavní proces ovládání OpenSSH bez použití lsof nebo fixační jednotky?