Se o seu jumpserver não restringir muito você, você pode fazê-lo em um comando no seu notebook:
ssh jumpserverB ssh serverC tar cf - dir1 dir2 | ssh serverA tar xvf -
Voila!
Edit: uh - essa foi a direção errada. Então, vamos fazer o contrário:
ssh serverA tar cf - dir1 dir2 | ssh jumpserverB ssh serverC tar xvf -
dir1 e dir2 são dois diretórios contendo os dados que você deseja transferir.
Estou EDITANDO essa resposta novamente - embora o FGreg já tenha resolvido seu problema original - porque sua solução usando -J funcionará em algumas máquinas, mas não em outras. Isto é porque o seu ssh pode não saber sobre a bandeira -J, assim como é o caso com o meu. Então, aqui estão algumas respostas para alguns comentários:
- Eu usei o tar (arquivador de fitas), porque ele pode manipular uma quantidade ilimitada de dados e - se você usar a saída padrão como sua "fita", você pode canalizá-lo através de qualquer coisa, sem armazená-lo em qualquer lugar. Dessa forma, contanto que você possa fazer ssh de uma máquina para outra, você pode transportar dados em uma quantidade ilimitada de saltos.
- Coisas como "Falha na verificação da chave do host" podem ser classificadas por ssh-ing na primeira máquina, depois em "ssh nextmachine" e assim por diante. É claro que se você tiver que alterar o usuário entre aspas ou especificar os pubkeys usando -i, você também precisará fazer isso nos comandos ssh do pipe.
- Sim, é claro, o tar pode compactar os dados para você; na maioria dos casos, isso acelerará o processo. Omiti isso por simplicidade.
- A solução de FGreg em sua própria resposta é um pouco diferente, pois não usa um pipe. Ele usa o redirecionamento de porta do ssh e é uma ótima maneira de lidar com situações em que um cano simplesmente não faz o trabalho. Mais uma vez, você pode adicionar quantos forwarings de porta em uma linha como você deseja. Como no host1:
ssh host2 -L 3333:host3:22
. Isso leva você ao host2 como de costume. Novamente no host1 em outra janela, você digitassh localhost -p 3333 -L 4444:host4:22
; isso leva você para o host3.ssh -p 4444 ...
você tem a ideia. - Às vezes você precisa de redirecionamento reverso, como FGreg precisou quando conectou ao servidorA. Adicionando aos nossos exemplos -L acima, poderíamos fazer isso usando
ssh serverA -R 4444:localhost:4444 serverA
; Aí podemosssh -p 4444 localhost
alcançar o host4 ouscp -P 4444 localhost
. - É claro que podemos encapsular completamente outras coisas de e para outros portos, mas isso se tornaria um post de blog geral ssh, então vou parar por aqui.