Eu sei que esta pergunta foi feita há alguns meses atrás - mas ao procurar por respostas para um requisito semelhante, achei muito útil o uso do ProxyCommand do OpenSSH.
Eu tenho algo como a seguinte configuração no meu arquivo de configuração do cliente local (na verdade, eu precisava de três saltos para chegar ao meu destino: servidor externo - > roteador - > caixa de destino na rede privada)
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
Essa cadeia significa que eu posso digitar
ssh mytarget
e ser enviado através dos saltos necessários.
Todos os arquivos de chave são armazenados localmente para que você não precise colocar arquivos em servidores externos. A mesma configuração funciona mesmo para o scp:
scp <localfile> mytarget:<remotepath>
Uma série de abordagens alternativas para o proxy ssh estão documentadas na seguinte página do wikibooks: link