Você também pode fazer isso ao contrário e talvez seja mais fácil.
Supondo que você tenha uma sessão ssh aberta com a máquina para a qual deseja enviar o arquivo. Esse PC que está mais distante, chamaremos isso de hop2. Seu host "proxy" será hop1. O PC que é a origem do arquivo, chamaremos essa origem.
origin:~/asdf.txt --> hop1 --> hop2:~/asdf.txt
Você pode construir túneis disponibilizando uma porta local em um PC remoto. Assim, definimos uma porta a ser aberta no PC remoto, que será um redirecionamento para a porta que você puxou quando construiu o túnel.
No hop2:
ssh -R 5555:127.0.0.1:22 <hop1_user>@<hop1_IP>
#this has the effect of building a tunnel from hop2 to hop1, making hop2's port 22 available on hop1 as port 5555
Agora, nessa sessão de túnel aberta, você pode fazer o mesmo do hop1 ao file_origin.
No hop1:
ssh -R 6666:127.0.0.1:5555 <origin_user>@<origin_IP>
#this has the effect of building a tunnel from hop1 to origin while also pulling the active tunnel with it, making hop1's port 5555 (hop2's port 22) available on origin as port 6666.
Agora você está no túnel do hop2 para o hop1 até a origem. Coincidentemente, agora as portas 5555 e 6666 estão abertas na origem, que são redirecionadas para a porta 22 do hop2. Nesta sessão, os seguintes são rotas scp válidas para o hop2:
Na origem:
scp -P 6666 ~/asdf.txt <hop2_user>@<127.0.0.1>:~/asdf.txt
Dessa forma, você pode ter um número arbitrário de saltos no meio, e é mais fácil trabalhar com isso em termos de encadear mais de dois saltos.