💾 Archived View for perso.pw › blog › articles › ssh-tunnel-scripting.gmi captured on 2024-05-26 at 15:06:14. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-03-21)

-=-=-=-=-=-=-

Simple way to use ssh tunnels in scripts

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