检查套接字文件是否可以使用

检查套接字文件是否可以使用

我将 contromaster 选项与 SSH 命令一起使用,如下所示:

ssh -i id_rsa -o ControlMaster=auto -o ControlPath='~/.ssh/controlmasters/%r@%h' -o ControlPersist=3600 user@hostname

这使我可以重复使用以前的连接并更快地登录。我注意到,当我失去 WiFi 连接并尝试在 10 分钟后重新连接时,我无法再重复使用相同的套接字文件。

有没有一种编程方法可以检查套接字文件是否仍然存在?最终我想创建一个 if 语句,检查现有的套接字文件是否可以使用,如果可以则继续,如果不能则创建一个新的。

答案1

使用ssh的-O check命令:

$ ssh -O check user@hostname || ssh -Nf user@hostname

与此相关的是,您可以通过将各种设置移至 ~/.ssh/config 中的一个节来简化 ssh 命令。在这里,我添加:%p到您的 ControlPath 模式,这使得 ssh 端口号成为套接字文件名的一部分。

host user@hostname
    IdentitiesOnly yes
    ControlPath ~/.ssh/controlmasters/%r@%h:%p
    ControlMaster auto
    ControlPersist 3600

那么你的命令就变得简单了

ssh -i id_rsa user@hostname

如果您始终使用相同的身份文件,您也可以使用参数在 ~/.ssh/config 中指定它IdentityFile。请注意,在 Ubuntu 22.04 中,id_rsa这是尝试的默认列表中的第一个条目,因此您可以简单地从命令行中删除它。有关详细信息,请参阅 ssh_config(5) 联机帮助页。

相关内容