Puoi anche farlo al contrario ed è forse più facile.
Supponendo di avere una sessione ssh aperta con la macchina a cui si desidera inviare il file. Questo PC più avanzato, lo chiameremo hop2. Il tuo host "proxy" sarà hop1. Il PC che è origine file, chiameremo tale origine.
origin:~/asdf.txt --> hop1 --> hop2:~/asdf.txt
È possibile creare tunnel che rendono disponibile una porta locale su un PC remoto. In questo modo stiamo definendo una porta da aprire sul PC remoto, che sarà un reindirizzamento alla porta che hai effettuato con te quando hai costruito il tunnel.
On 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
Ora in quella sessione di tunnel aperta, puoi fare lo stesso da hop1 a file_origin.
On 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.
Ora sei passato al tunnel da hop2 a hop1 all'origine. Per coincidenza, ora entrambe le porte 5555 e 6666 sono aperte sull'origine, che sono reindirizzamenti alla porta 22 di hop2. All'interno di questa sessione, entrambe le seguenti sono rotte scp valide per hop2:
Sull'origine:
scp -P 6666 ~/asdf.txt <hop2_user>@<127.0.0.1>:~/asdf.txt
In questo modo, puoi avere un numero arbitrario di salti intermedi, ed è più facile lavorare in termini di concatenamento più di due salti.