Title : Simple way to use ssh tunnels in scripts Author: Solène Date : 15 May 2019 Tags : ssh automation While writing a script to backup a remote database, I did not know how to handle a ssh tunnel inside a script correctly/easily. A quick internet search pointed out this link to me: [https://gist.github.com/scy/6781836](https://gist.github.com/scy/6781836) While I'm not a huge fan of the ControlMaster solution which consists at starting a ssh connection with ControlMaster activated, and tell ssh to close it, and don't forget to put a timeout on the socket otherwise it won't close if you interrupt the script. But I really enjoyed a neat solution which is valid for most of the cases: $ ssh -f -L 5432:localhost:5432 user@host "sleep 5" && pg_dumpall -p 5432 -h localhost > file.sql This will create a ssh connection and make it go to background because of `-f` flag, but it will close itself after the command is run, `sleep 5` in this case. As we chain it quickly to a command using the tunnel, ssh will only stops when the tunnel is not used anymore, keeping it alive only the required time for the pg_dump command, not more. If we interrupt the script, I'm not sure ssh will stop immediately or only after it ran successfully the command sleep, in both cases ssh will stop correctly. There is no need to use a long sleep value because as I said previously, the tunnel will stay up until nothing uses it. You should note that the ControlMaster way is the only reliable way if you need to use the ssh tunnel for multiples commands inside the script.