ssh -R make target host accept connection on all interfaces
I have a SOURCE host which is remote and behind NAT. I want to connect to SOURCE via ssh from a TARGET host which is in my home network. Thus I issue the following command on SOURCE:
ssh -R 2222:localhost:22 TARGET -N
Now from TARGET I can connect to SOURCE via ssh -p 2222 localhost
. Fine
With TABLET in the same network of TARGET I would expect this to work:
ssh -p 2222 TARGET
Instead it looks like TARGET only accept connections on port 2222 from localhost. The following is on TARGET:
user@TARGET:~/$ netstat -l | grep 2222
tcp 0 0 localhost:2222 *:* LISTEN
tcp6 0 0 localhost:2222 [::]:* LISTEN
Is there a way to make the remote side of a ssh -R
accept connections from all its interfaces?
By default, it will listen on localhost (loopback interface) only. You need to specify the bind_address as 0.0.0.0
in your command:
ssh -R 0.0.0.0:2222:localhost:22 TARGET -N
You need also to configure SSH daemon on target host to allow client to specify the bind_address. It is prohibited by default to listen to all interfaces. So, you will always find it listening on loopback even if you specifiy 0.0.0.0
as bind_address.
You need to have a line like the following in /etc/ssh/sshd_config
to allow client to specify the bind address.
GatewayPorts clientspecified
When done, you can verify using netstat -lntp
on target machine.