Я знаю, что этот вопрос задавался несколько месяцев назад, но когда я искал ответы на аналогичные требования, я нашел, что использование ProxyCommand OpenSSH очень полезно.
У меня есть что-то вроде следующей настройки в моем локальном конфигурационном файле клиента (мне фактически потребовалось три прыжка, чтобы добраться до моей цели: внешний сервер-> маршрутизатор -> целевой блок в частной сети)
In file ~/.ssh/config
Host myexternalserver
User username1
IdentityFile <key file for username1@myexternalserver>
Hostname myexternalserver.fully.qualified.name
Host myrouter
Hostname myrouter.fully.qualified.name
User root
IdentityFile <key file for root@myrouter>
ProxyCommand ssh -q myexternalserver nc %h %p
Host mytarget
Hostname mytarget.private.name
User username2
IdentityFile <key file for username2@mytarget>
ProxyCommand ssh -q myrouter nc %h %p
Эта цепочка означает, что я могу просто напечатать
ssh mytarget
и будет отправлен через необходимые прыжки.
Все файлы ключей хранятся локально, поэтому вам не нужно помещать файлы на внешние серверы. Тот же конфиг работает даже для scp:
scp <localfile> mytarget:<remotepath>
Несколько альтернативных подходов к прокси-серверу ssh описаны на следующей странице викибук: http://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts