我正在尝试为连续运行的一系列命令创建多路复用 ssh 连接,然后在完成一系列命令后,关闭多路复用会话。
根据文档,第一个连接应该启动控制主机:
ssh -o "ControlMaster=auto" -S /home/justin/.ssh/sockets/multiplex_ssh.sock [email protected] "uptime"
然后剩下的命令只需要通过:
ssh -S /home/justin/.ssh/sockets/multiplex_ssh.sock [email protected] "free -m"
ssh -S /home/justin/.ssh/sockets/multiplex_ssh.sock [email protected] "hostname"
ssh -S /home/justin/.ssh/sockets/multiplex_ssh.sock [email protected] "date"
最后,要关闭多路 ssh 会话,我应该能够:
ssh -O exit -S /home/justin/.ssh/sockets/multiplex_ssh.sock [email protected]
不幸的是,当将命令传递给 ssh 时,运行的第一个 ssh 命令ControlMaster=auto
不会使目录中的套接字保持活动状态。/home/justin/.ssh/sockets
相反,它会立即关闭套接字。
这怎么可能?
看起来你忘记设置了
ControlPersist
。如果未设置,则如果第一个会话关闭,主连接将不会保持打开状态。例如,您可以在您的
$HOME/.ssh/config
: