ssh via multiple hosts
Yes, there is a great way to do that using ssh ProxyCommand and netcat
Put something like this in your .ssh/config
Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p
This will log directly into any .department.university.com server using the jump/bastion host unix.university.com. You may also need a stanza for unix.university.com directly.
Here is a link explaining how it works: http://backdrift.org/transparent-proxy-with-ssh
With this technique, you can now just write
ssh unix.department.university.com
and it will all appear direct. Tools like rsync, scp, etc (anything in the ssh stack) will work transparently, as well.
You can use the ssh client to execute ssh on the remote machine upon login.
ssh -t unix.university.com \
ssh -t unix.department.univeristy.com \
ssh -t office-machine.department.university.com
(The reason I include -t
in the invocations is because ssh was giving me errors re: stdin not being a terminal when I tried it on my own machine; your machine may be different.)
When you exit from the last shell, the process will chain-exit, saving you typing Ctrl-D over and over again.
In OpenSSH 7.3, ssh added the -J
command line flag and the corresponding ProxyJump
configuration option to solve exactly this problem.
Give the hosts you wish to ssh through as a comma-separated list to -J
. For example:
ssh -J unix.university.com,unix.department.university.com \
office-machine.department.university.com