我将 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) 联机帮助页。