我正在尝试为一系列连续运行的命令创建多路复用 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
。相反,它会立即关闭套接字。
这怎么可能?
答案1
看起来您忘记设置了ControlPersist
。如果未设置,则在第一个会话关闭时主连接将不会保持打开状态。
例如,您可以设置$HOME/.ssh/config
:
ControlPersist 600