OpenSSH

Using ssh as a jumphost
You can do this using ProxyCommand and netcat in .ssh/config:

Host gateway
 * 1) Your 'gateway' server.

Host server1 ProxyCommand ssh gateway /bin/netcat %h %p
 * 1) Any other server.

If you do ssh server1, you will open an SSH connection from your current location to your 'gateway' server, which will open a TCP connection to server1. This TCP connection will serve as the connection for SSH between your current location and server1.

Edit: This technique is commonly called 'ssh jumphost'. http://serverfault.com/a/393607/47650