Enabling SSH multiplexing for a series of commands, then closing it

Justin asked:

I’m trying to create multiplexed ssh connections for a series of commands that run in succession, then after the series of commands is finished, close the multiplex session.

According to the documentation, the first connection should start the control master:

ssh -o "ControlMaster=auto" -S /home/justin/.ssh/sockets/multiplex_ssh.sock [email protected] "uptime"

Then the rest of the commands just need to pass:

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"

Finally, to close the multiplex ssh session, I should be able to do:

ssh -O exit -S /home/justin/.ssh/sockets/multiplex_ssh.sock [email protected]

Unfortunately, the first ssh command running ControlMaster=auto does not keep a socket active in the directory /home/justin/.ssh/sockets when passing a command to ssh. It instead immediately closes the socket.

How is this possible?

My answer:

It looks like you forgot to set ControlPersist. If not set, then the master connection will not remain open if that first session is closed.

For example you can set in your $HOME/.ssh/config:

ControlPersist 600

View the full question and any other answers on Server Fault.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.