如何判断 ssh ControlMaster 连接是否正在使用中

Dav*_*ser 7 networking linux ssh tunneling daemon

我想使用sshControlMaster功能来共享连接以提高速度。我正在尝试编写脚本,以便我可以启动/重新启动/停止与不同主机的多个连接。

如何确定这些连接中的任何一个是否正在使用中?如果我在 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
Run Code Online (Sandbox Code Playgroud)

小智 8

你可以简单地使用

ssh -o ControlPath=$socket -O check 
Run Code Online (Sandbox Code Playgroud)

对于您打开的每个 $socket (如果将它们保存在单个目录中,则很容易)。

如果检查失败(连接不再活动),则返回 255,如果通过则返回另一个值。您可能还需要指定主机名,但是 $socket 上的 awk 不会给您任何东西:)

  • 我发现我必须在最后传递一些参数,否则我会出错。```ssh -o ControlPath=8dcbe9e120884b5f25709f25ef2f0863ac3301d4 -O check ```*""*``` Master running (pid=25512)```但没有它,它会回复用法;```用法:ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char]```(这是在fedora f27 (OpenSSH_7 .6p1、OpenSSL 1.1.0g-fips 2017 年 11 月 2 日) (3认同)