Skip to content

Instantly share code, notes, and snippets.

@lucabelluccini
Created December 12, 2018 01:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lucabelluccini/5b44008fd38e78d8e6e6f5cd1f60138d to your computer and use it in GitHub Desktop.
Save lucabelluccini/5b44008fd38e78d8e6e6f5cd1f60138d to your computer and use it in GitHub Desktop.
How to perform SSH jump
Using ProxyJump with SSH and SCP
By Paul Heinlein | Nov 2, 2017
It’s somewhat common to have what’s known as a “jump host” serve as an SSH gateway to a remote network. You use ssh to log into the jump host (or “jump server”) and from there use ssh to log into an internal host that’s not directly accessible from the Internet.
With the release of ssh version 7.3, the OpenSSH folks made it easier to do the jump and internal login in one step.
The Old Way
I’ve used the ProxyCommand for some time now, relying on nc to push SSH traffic over an established tunnel. Without going into the gory details, the process boils down to
setting up an SSH session using the -D option to establish a SOCKS5 port-forwarding connection,
configuring SSH to use a ProxyCommand to push traffic through the SOCKS5 connection.
It works reasonably well if you have a decent version of nc and you’ll be using that SOCKS5 tunnel for several connections. You can also use the SOCKS connection with web browsers to reach remote-internal web servers.
The New Way
Sometimes, however, you may want to avoid the two-step process, or you may be on a host that doesn’t have all the tools you need for SOCKS connections.
The new -J (aka ProxyJump) command is tailor-made for you! Here’s the basic invocation:
ssh -J your.jump.host remote.internal.host
You’ll end up logged into the remote internal host, and ssh automatically takes care of the intermediate step of logging into the jump host first.
You can even use it as an option for secure file copies:
scp -o 'ProxyJump your.jump.host' myfile.txt remote.internal.host:/my/dir
The file myfile.txt will end up in the /my/dir directory on your remote internal host.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment