How I use ssh's connection sharing feature

August 8, 2009

Following on the basic overview, here's how I use OpenSSH's connection sharing feature.

First, since I hate programs that don't exit when I want them to, I don't let ssh automatically create connection masters. Instead I always explicitly create them myself, so that I can do so in a way that harmlessly parks them in the background. So while I set a ControlPath (to a value mentioned in the previous entry), I leave ControlMaster set to no, the default.

When I want to create a master ssh, I have a script that boils down to:

ssh -M -f -o "BatchMode yes" $HOST exec sleep 120

You might wonder about the 'sleep 120'.

One of the peculiarities of how I use connection sharing is that so far I always do it to hosts that I also have persistent sessions to. These persistent sessions pin the master ssh in place whether or not the master ssh itself is still doing anything, so the sleep does two things here. First, it keeps the master ssh going long enough for my real sessions to start, and second, it means that if and when I later tear down all of my real sessions to the host, the master ssh will also exit because the sleep has long since finished.

(Ideally there would be a ssh option for 'keep running N seconds after the last session closes to see if a new subordinate shows up'. Then I could set that to 120 seconds or so and just use '/bin/true' as the command that the master ssh runs.)

In actual practice I don't create master ssh instances by hand. Instead I do it from my X startup file, which (vastly simplified) winds up looking like:

ssh-master host1
sleep 1  # give it time to come up
ssh host1 x-app-1 &
ssh host1 x-app-2 &

(And then anything else that I want to do on host1 later will also get the benefits of using the existing connection.)

Among other things, this approach has the benefit that it's easy to add. I didn't need to change anything that my X startup script was already doing; I just inserted an additional command early on. (And then took it out again the first time I tried it, when it turned out to cause various problems.)

Written on 08 August 2009.
« The basics of ssh's connection sharing feature
Building true ssh opportunistic connection sharing »

Page tools: View Source, Add Comment.
Login: Password:
Atom Syndication: Recent Comments.

Last modified: Sat Aug 8 02:43:53 2009
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.