ssh -D <port> <[email protected]>; but in reverse?

user103862 picture user103862 · May 9, 2009 · Viewed 17.9k times · Source

Is it possible to set up an SSH tunnel with dynamic port forwarding like this:

ssh -D

but do it the other way around? That's to say I want to initiate the connection on my local machine and have the dynamic port forwarding happen there, and have my friend connect his browser to the other end of the tunnel.

The above works perfectly if my friend types the above but I don't want to give him ssh access to my machine, just let him proxy his browser though it.

Answer

Stephan202 picture Stephan202 · May 9, 2009

For openssh, see the -R switch:

 -R [bind_address:]port:host:hostport
         Specifies that the given port on the remote (server) host is to
         be forwarded to the given host and port on the local side.  This
         works by allocating a socket to listen to port on the remote
         side, and whenever a connection is made to this port, the connec‐
         tion is forwarded over the secure channel, and a connection is
         made to host port hostport from the local machine.

Though there may be better solutions, you could create a SOCKS proxy at your friend's computer remotehost at port 24680 in the following manner. First, do

ssh -R 24680:localhost:12345 remotehost

And then, do

ssh -D 12345 localhost

Obviously, both sessions need to be kept alive simultaneously.