Linux

如何判斷 ssh ControlMaster 連接是否正在使用中

  • July 14, 2019

我想使用ControlMasterssh的功能來共享連接以提高速度。我正在嘗試編寫腳本,以便可以啟動/重新啟動/停止與不同主機的多個連接。

如何確定這些連接中的任何一個是否正在使用中?如果我在 ssh 會話打開時殺死它們,它就會關閉

理想情況下,我的重啟腳本看起來像(偽腳本) - 停止腳本在底部沒有 ssh 命令的情況下是等效的:

for HOST in $HOST_LIST
 do
   MASTER_PID=`find_master_pid $HOST`
   if $MASTER_PID
     then
       if `find_child_pid`
         echo Connection to $HOST in use: not terminating
       else
         kill -SIGHUP $MASTER_PID
       fi
   ssh -TMNf $HOST

你可以簡單地使用

ssh -o ControlPath=$socket -O check 

對於您打開的每個 $socket (如果將它們保存在單個目錄中很容易)。

如果檢查失敗(連接不再活動),則返回 255,如果通過,則返回另一個值。您可能還需要指定主機名,但 $socket 上的 awk 不會給您任何東西:)

@Renik 的回答對我不起作用。請參閱下面的內容。


這對我來說只使用控制主機的套接字文件:

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

**注意:**您也可以使用ssh -S ~/.ssh/<controlfile> ...,它是上述形式的較短形式。

例子

這是一個我已經建立到遠端伺服器的連接的範例:

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

並且斷開連接:

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

如果它仍然連接,這將迫使它立即退出:

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

我不清楚,但它似乎可能是一個錯誤,ssh 因為它最後需要一個額外的參數,即使blah在我使用的開關的上下文中沒有意義。

沒有它給我這個:

$ 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]] [user@]hostname [command]

版本資訊

作業系統

$ 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

我確認在這兩個版本中,都需要額外的虛假參數。

參考

引用自:https://serverfault.com/questions/211213