| 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. |