SSH Config Tips: RemoteFoward and LocalForward
Suppose you have a local laptop without a public IP named A (192.168.1.7) and a remote server that has a public IP name named B (172.16.0.77) and another remote server C (172.16.0.78) which is in the same LAN with B. You can connect to B directly by ssh, and you cannot connect to C directly because C doesn't have an external IP address.
-
You want to map port 5001 on A to the same port on B to make you local service temporarily public), you should add this line in laptop A's .ssh/config file:
RemoteForward 5001 localhost:5001 #here localhost refers to A
-
You want to map port 3306 on Host B (Remote machine) to the 3306 port on Host A (your laptop), you should add this line in laptop A's .ssh/config file:
LocalForward 3306 localhost:3306 # here localhost refers to B
-
You want to map port 22 on machine C to the 8045 port on A, add this line:
LocalFoward 8045 172.16.0.78:22
Finally, the following code shows the final configuration in your ~/.ssh/config
file
Host B
HostName b.somedomain.com
Port 22
RemoteForward 5001 localhost:5001
LocalForward 3306 localhost:3306
LocalForward 8045 172.16.0.78:22
Thus, after you get connected with Host B through this config file,
- You can tell your friends or colleague to visit your local website by visiting
http://b.somedomain.com:5001
. - You can get connected to Host C directly by running
ssh -p 8045 username@localhost
command. - You can also directly visit the locally deployed MySQL service on Host B by connecting your local laptop's 3306 port.