Date: Thu, 12 Dec 1996 08:57:16 -0800 From: John Polstra <jdp@polstra.com> To: roberto@eurocontrol.fr Cc: hackers@freebsd.org, marcs@znep.com, jkh@freebsd.org Subject: Re: Fwd: CVSup with SSH Message-ID: <199612121657.IAA17705@austin.polstra.com> In-Reply-To: <Mutt.19961211160258.roberto@caerdonn.eurocontrol.fr> References: <Mutt.19961211160258.roberto@caerdonn.eurocontrol.fr>
next in thread | previous in thread | raw e-mail | index | archive | help
About running CVSup through a firewall by using SSH port forwarding, I
wrote:
> I've been thinking this over. I don't think it can be made to work
> with the current release of CVSup.
Good news, I was wrong! It seems to be possible after all. Here is the
recipe:
* Invoke ssh with:
-L 5999:localhost:5999 -R 6666:localhost:6666
^^^^...........^^^^ (any free port)
Note that it's "-L" in the first one and "-R" in the second one.
* Specify "host=localhost" in your cvsupfile.
* Invoke cvsup with "-P 6666".
I tried a quick test of it between two machines here, and it seemed
to work OK. I checked both sides of the link with netstat, and
the connections were all set up right through the ssh channel. I
did a small update which worked and completed successfully.
It definitely needs more thorough testing, though. To work with
CVSup, a proxy has to be very good about handling some strange
communication patterns. For example, it is normal and common that
at least one of the 4 unidirectional channels is completely full
and blocked by flow control. Yet the other 3 unidirectional channels
have to continue to flow unimpeded. If the proxy falls short in
that regard, deadlock results.
Please let me know how it works out in practice.
Here's how the connections are set up under this method:
* Client connects to port 5999 on its own host, and that gets forwarded
to port 5999 of the server host. Because of the forwarding, both
client and server think they're connected to "localhost".
* Client sets up a second socket, binds it to "localhost:6666", and
listens.
* Over the first channel, client instructs server to do a connect to
"localhost:6666".
* Server does the connect. Because it's "localhost", it connects to its
own host rather than the client's host. Sshd is already there,
listening for the connection. It forwards the connect to port 6666 on
the client host.
The key to it working is that localhost has the same address everywhere,
but it references different hosts depending on where you are. Thanks to
Marc Slemko for the idea!
John
--
John Polstra jdp@polstra.com
John D. Polstra & Co., Inc. Seattle, Washington USA
"Self-knowledge is always bad news." -- John Barth
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199612121657.IAA17705>
