我一直利用会话重用来加快与各种生产服务器的连接,方法是像这样设置我的 ~/.ssh/config 文件:
Host server.company.org
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
这很好,但是如果我的第一个 ssh 会话在没有代理转发的情况下打开,例如ssh server.company.org
,并且我稍后启动另一个需要代理转发的 ssh 命令,例如ssh -A server.company.org
,则代理转发不起作用。
是否可以强制第二个 ssh 会话不是除了删除~/.ssh/sockets
first 的内容之外,还有什么方法可以使用现有套接字?如果没有,是否有可靠的方法来检测现有套接字是否即将被重用?我在脚本中遇到了这个问题,因此用合适的错误消息进行轰炸是可以接受的行为。
答案1
为此,您可以强制ControlMaster auto
覆盖,如下所示:
ssh -A -S none server.company.org
...-S none
表示不使用控制主机。
您还可以检查ControlMaster
特定主机是否正在运行:
ssh -O check server.company.org
...并以同样的方式杀死它:
ssh -O exit server.company.org