Title: Simple way to use ssh tunnels in scripts | |
Author: Solène | |
Date: 15 May 2019 | |
Tags: ssh automation | |
Description: | |
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/67818 | |
36) | |
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. |