SSH connection allows you to open itself as a "tunnel" (do not confused with VPN). It facilitates port secure connection across internet for non-secure applications like VNC. However, if the destination machine is behind a firewall server, it needs to be allowed for SSH tunneling for the given domain name, IP address and port.
We will do it step by step.
If you're tunneling SSH protocol, you need to enable this to your /etc/ssh/sshd_config
:
GatewayPorts yes
If you're tunneling via TCP (e.g. using a remote desktop solution that has TCP Tunneling capability, you need to enable allow TCP forwarding:
AllowTcpForwarding yes
Now, we can setup SSH connection with the destination machine. We will be using a port forwarding mechanism when we setup the connection. Here is the command:
$ ssh -N -f -L <local_port>:localhost:<destination_port> USER@IP_OR_DOMAIN_NAME
# example
$ ssh -N -f -L 5000:localhost:5901 u0@192.168.0.1
This will forward the destination port to our localhost:port. In this example above, it is 192.168.0.1:5901
to localhost:5000
.
This section is about establishing a connection between local application via the tunnelled port.
Once done, instead of connecting to the destination directly, have your local application like VNC to connect to the local port-forwarded address. From the example above, we should have the following command for VNC application:
$ <APP> localhost:<local_port>
# example
$ vncviewer localhost:5901
Once done, instead of connecting to the destination directly, have your local SSH client to connect to the local port-forwarded address. From the example above, we should have the following command:
$ ssh -R <remote_port>:localhost:<local tunnelled port> <remote user>@<remote domain>
# example
$ ssh -R 22:localhost:5283 u0@testSubject
That's all about SSH tunneling. It's dead simple to establish connection between machines across internet securely.