I have two machines, Client and Server.
Client (who is behind a corporate firewall) opens a reverse SSH tunnel
to Server, which has a publicly-accessible IP address, using this command:
ssh -nNT -R0:localhost:2222
[email protected]
In OpenSSH 5.3+, the 0 occurring just after the -R means "pick an available port" rather than explicitly calling for one. The reason I'm doing this is because I don't want
to pick a port that's already in use. In truth, there are actually many Clients out there that need
to set up similar tunnels.
The problem at this point is that the server does not know which Client is which. If we want
to connect back
to one of these Clients (via localhost) then how do we know which port refers
to which client?
I'm aware that ssh reports the port number
to the command line when used in the above manner. However, I'd also like
to use autossh
to keep the sessions alive. autossh runs its child process via fork/exec, presumably, so that the output of the actual ssh command is lost in the ether.
Furthermore, I can't think of any other way
to get the remote port from Client. Thus, I'm wondering if there is a way
to determine this port on Server.
One idea I have is
to somehow use /etc/sshrc, which is supposedly a script that runs for every connection. However, I don't know how one would get the pertinent information here (perhaps the PID of the particular sshd process handling that connection?) I'd love some pointers.
Thanks!