我可以让 ssh 告诉我它将使用哪个控制文件进行多路复用吗?

我可以让 ssh 告诉我它将使用哪个控制文件进行多路复用吗?

我使用以下选项来~/.ssh/config启用连接多路复用:

ControlMaster auto
ControlPath ~/.ssh/control/master-%r@%h:%p

但是,这有一个令人讨厌的问题,即连接到特定服务器的第一个 shell 必须是最后一个断开的,因为它是所有其他连接正在使用的主连接。因此,如果您注销主服务器,它似乎只是挂起。为了解决这个问题,我想用一个脚本包装 ssh,该脚本检查控制主文件是否存在,如果不存在,则在后台启动主 ssh 进程。然后它将启动从属 ssh 会话。

为了实现这一点,我的脚本必须确定 ssh 将使用的控制文件的路径。这将需要解析 ssh 命令行选项和配置文件并实现确定 ControlPath 的逻辑。有没有办法只询问 ssh 将使用什么路径,这样我就可以检查它了?

答案1

刚刚发现。ssh -O check HOST

答案2

根据我的测试,可以接受的答案是:

ssh -O check HOST

仅当不存在时才会提供控制文件

Control socket connect(<path to control file>): No such file or directory

否则

Master running (pid=<number>)

但是,grepssh -G总会给你路径。

-G 使 ssh 在评估主机和匹配块后打印其配置并退出。

>>> ssh -G HOST | grep controlpath
controlpath <path to control file>

注意:如果您在 ssh 配置文件中使用%l%C(例如),这将对本地机器进行评估。

相关内容