How to setup proxy jump with PuTTY

In GNU/Linux I find it very easy to perform the following, but I am struggling to get our Windows users to connect via the same method.

The following is what I do on GNU/Linux. Can you please demonstrate how to do the same in Windows. We currently use PuTTY. Is there an alternative?

GNU/LINUX

The raw command without any configuration set up looks like this:

ssh -J <jump-user>@<jump-host> <protected-user>@<protected-host>

An SSH config can be created at ~/.ssh/config that looks like this:

Host jump
    User <jump-user>
    HostName <jump-host>
Host protected
    User <protected-user>
    HostName <protected-host>
    ProxyJump jump

You can then ssh like this: ssh protected


Solution 1:

PuTTY does not have a direct equivalent of -J/ProxyJump. (Yet – The upcoming version will)

But there are two alternatives (while a bit more complicated to set up):

  • Port forwarding.

    You open a connection in one PuTTY instance to the jump host and forward a local port to the protected host. For that see:
    How to create SSH tunnel using PuTTY in Windows?

    And then you open a connection in another PuTTY instance to the forwarded port.

  • Local proxy command using Plink.

    This is an equivalent of OpenSSH ProxyCommand directive:
    OpenSSH ProxyCommand equivalent in PuTTY


Apart from PuTTY, there's also Microsoft build of OpenSSH for Windows. On Windows 10 version 1803 or newer, OpenSSH is built-in. On older versions of Windows 10, you can install it as an "Optional Feature" named "OpenSSH Client". On you can just download a ZIP package. The client tools do not need any installation, you can just extract them.

See also Does OpenSSH support multihop login?

Solution 2:

What I've done in putty is set the host to the jump machine. Then in Connection -> SSH I set the remote command to ssh -Y <protected-user>@<protected-machine>. Not quite the same thing, but it instructs putty to immediately run the SSH command upon login and when I close that, the whole thing closes down because that command will have completed.