Bash

如果 ssh 控制套接字已經存在,如何中止?

  • April 18, 2020

我在我的腳本中使用以下行:

ssh -f -N -M -S <control socket> <host>

這意味著初始連接僅保留在後台,我可以將其用於後續呼叫ssh

ssh -S <control socket> <host> <command>

但是,如果我有多個帶有命令的腳本,這些命令應該使用相同的控制套接字並將“後台”呼叫ssh放入所有腳本中,我將在某個時候收到以下消息:

ControlSocket <control socket> already exists, disabling multiplexing

這對腳本的其餘部分沒有影響,因為顯然套接字存在並且可以被後續ssh命令使用。然而,即使“後台”會話無法打開套接字,它也不會退出並保持活動狀態——只是沒有多路復用。

使用[ -Sorssh -O check來檢查套接字的存在仍然會留下競爭條件的可能性。

我該如何做“如果它不存在則打開控制套接字,如果存在則退出”?

我認為您正在尋找ControlMaster auto,可以在配置文件中指定,也可以直接在命令行中使用-o ControlMaster=auto.

這使您可以統一打開連接並使用它的命令(對 也很有幫助ControlPersist)。

引用自:https://unix.stackexchange.com/questions/580994