Secure Shell or SSH is a highly versatile application layer network protocol used for secure communication between networked hosts (in Server/client model). Designed as a replacement for telnet with Public-key cryptography for data confidentiality on unsecured networks ie. Internet.
SSH is most popular on Unix like systems and used for remote administration, tunneling, TCP and X11 forwarding and even file transfer (SFTP and SCP). This post will focus on SSH on windows as I mostly work with it, and for me one of the most interesting features – the SSH tunneling / TCP forwarding.
Most popular flavor on POSIX systems is OpenSSH, that includes ssh (the client), sshd (the SSH server daemon), scp, sftp and others.
On Windows: You can actually go with the same OpenSSH package under Cygwin (Unix-like environment for Microsoft Windows).
There are of course some Windows native servers and clients, notable:
KpyM Telnet/SSH Server, freeSSHd, the unbeatable PuTTY and its many forks with my favourite being KiTTY.
DD-WRT and Open-WRT feature Dropbear SSH server and client for its light use of resources.
Local port forwarding
Local port forwarding enables you to tunnel TCP traffic from your machine to ssh server or remote network that ssh server has access to.
SSH client on your local machine listens on specified port and forwards all TCP traffic to the specified destination address and port.
For example: VNC Viewer (with traffic destined to localhost on port 5900 > SSH client listening on port 5900 and forwarding traffic to the specified IP and port on server side of the tunnel -> server -> Other hosts that server has access to (optional).
Note that local port is arbitrary port number as long as you can specifiy it in software that you wish to tunnel.