ProxyJump
Novo no OpenSSH 7.3:
A$ scp -oProxyJump=B thefile C:destination
(Nos bastidores, isso apenas usa ProxyCommand e ssh -W
.)
ProxyCommand
Atualizado para incluir -W de outras respostas:
A$ scp -oProxyCommand="ssh -W %h:%p B" thefile C:destination
Se A tiver um cliente SSH muito antigo instalado (sem -W
support) ou se B estiver configurado para não permitir o encaminhamento de TCP (mas ainda permitir comandos do shell), use alternativas:
A$ scp -oProxyCommand="ssh B socat stdio tcp:%h:%p" thefile C:destination
A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination
Tubos
A$ tar cf - thefile anotherfile | ssh B "ssh C \"cd destination && tar xvf -\""
A$ (echo thefile; echo anotherfile) | cpio -o | ssh B "ssh C \"cd destination && cpio -i\""
Para apenas um arquivo:
A$ ssh B "ssh C \"cd destination && cat > thefile\"" < thefile
"Túnel" até B
A$ ssh -f -N -L 4567:C:22 B
(continues running in background)
A$ scp -P 4567 thefile localhost:destinationPath
Quando terminar, não esqueça de matar o processo ssh
iniciado anteriormente (que caiu para o segundo plano devido a -f -N
).
-
-f
Solicita que o ssh vá para o segundo plano antes da execução do comando. Isso é útil se o ssh solicitar senhas ou senhas, mas o usuário desejar em segundo plano. Isso implica -n. -
-N
Não executa um comando remoto. Isso é útil apenas para encaminhar portas.
Inverta "túnel" através de B para A
Nem sempre funciona:
A$ ssh -f -N -R 4567:localhost:22 B
(now you can reach A from B, by using localhost:4567)
B$ scp -P 4567 localhost:thefile C:destination
-
-R
Especifica que as conexões para a porta TCP fornecida ou o soquete Unix no host remoto (servidor) devem ser encaminhadas para o host e a porta, ou soquete Unix, no lado local.