I know this question was asked a few months ago - but when searching for answers to a similar requirement I had I found use of OpenSSH's ProxyCommand very helpful.
I have something like the following setup in my local client config file (I in fact needed three hops to get to my target: external server-> router -> target box on private network)
In file ~/.ssh/config
IdentityFile <key file for username1@myexternalserver>
IdentityFile <key file for root@myrouter>
ProxyCommand ssh -q myexternalserver nc %h %p
IdentityFile <key file for username2@mytarget>
ProxyCommand ssh -q myrouter nc %h %p
This chain means I can just type
and be sent through the required hops.
All the key files are stored locally so you don't need to put files on external servers. The same config even works for scp:
scp <localfile> mytarget:<remotepath>
A number of alternative approaches to ssh proxying are documented on the following wikibooks page: http://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts