I have a situation where I want to connect to a Linux machine running VNC (lets call it VNCServer) which is behind two consecutive Linux machines i.e., to ssh into the VNCServer, I have to ssh into Gateway1 from my laptop, then from Gateway1 shell I ssh into the Gateway2 and then from that shell I finally ssh into VNCServer. I cannot change the network design and access flow Laptop-->Gateway1-->Gateway2-->Server. I have no root privileges on Gateway1 and all ports except 22 and 5901 are closed.

Is there a way by which I can launch a VNC viewer on my laptop and access the VNCServer? I understand that it might be done using ssh tunneling features and I have putty on my Windows laptop (sorry, no Linux or Cygwin etc. can be installed on the work laptop). Any help will be greatly appreciated as this would make my life so easier!

2 Answers 2


Putty does support ssh tunnels, if you expand the Connection, SSH tree, you'll see an entry for tunnels.

Local tunnels produce a localhost port opening on your windows machine that remotes to the ip address and port you specify. For instance, when I'm trying to RDP to a desktop at my house, I'll generally choose a random local port, something like 7789, then put the local ip address of the desktop ( as the remote host. Be sure to click "Add", then "Apply." At this point, when you rdp to, you'll then connect to over the putty session.

This is where the fun comes in. If you then setup a port tunnel on your intermediate box, setting up the local port you specified as the remote port in putty, you can then bounce through your putty, through the intermediate box your final destination. You'll still need to do a few ssh connects, but you'll be able to cross vnc or rdp directly from the windows system once you're set, which is what I believe you're looking to do.


  1. Head over to the tunnels panel in Putty (Connections->SSH->Tunnels accessed either from the context menu if the ssh session is already active, or in the beginning connection screen when just starting putty)
  2. Create a tunnel with local source 15900, and remote source
  3. Connect (if not already connected) to Gateway1.
  4. On Gateway1, ssh -L user@Gateway2
  5. Once the ssh to Gateway2 is up, attempt to vnc to -- you should now see the VNC screen on the far side!

ADDED BONUS -- not many people know this, but this process can also be used to proxy IPv6/IPv4 traffic as well. SSH doesn't care what protocol it uses for the tunnels, so you can theoretically access IPv6 only hosts from an IPv4 only system, given that the ssh server is dual stack (has both IPv4 and IPv6 addresses.)


There is an alternate if you want to use PuTTY for both hops. In this example we are hopping from Gateway #1 ( to Gateway #2 ( to port 80 on

  1. First create hop to gateway #1. First setup the connection to the first server. Setup a tunnel to the second gateway in Connection>SSH>Tunnels. In this example we're forwarding port 2222 to the second gateway.

    connect to servert

    set up tunnel

  2. Now we'll setup the second hop. We'll tunnel through the first gateway to the next gateway and setup port forwarding on the second gateway. The connection is to localhost on port 2222. This will tunnel through the running ssh connection to the second hop. On this connection we setup a port forward from port 3333 to

    enter image description here

    enter image description here

  3. Now open up a browser and navigate to and you'll tunnel through the two SSH connections to

  • 3
    Is there a way to achieve the same using one single putty session with two tunnels configured in the SSH -> Tunnels menu? In this way you only need to open one putty instance?
    – ulrich
    Jul 18, 2016 at 9:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.