Vous pouvez également procéder à l'inverse, ce qui est peut-être plus facile.
Supposons que vous ayez une session ssh ouverte avec la machine à laquelle vous voulez envoyer le fichier. Ce PC le plus éloigné, nous l'appellerons hop2. Votre hôte "proxy" sera hop1. Le PC qui est à l'origine du fichier, nous l'appellerons origine.
origin:~/asdf.txt --> hop1 --> hop2:~/asdf.txt
Vous pouvez construire des tunnels rendant un port local disponible sur un PC distant. Nous définissons ainsi un port à ouvrir sur le PC distant, qui sera une redirection vers le port que vous avez emporté avec vous lorsque vous avez construit le tunnel.
Sur 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
Maintenant, dans cette session tunnel ouverte, vous pouvez faire la même chose de hop1 à file_origin.
Sur 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.
Vous avez maintenant un tunnel de hop2 à hop1 vers l'origine. Par coïncidence, les ports 5555 et 6666 sont maintenant ouverts sur l'origine, ce sont des redirections vers le port 22 de hop2. Dans cette session, les deux éléments suivants sont des routes scp valides vers hop2 :
Sur l'origine :
scp -P 6666 ~/asdf.txt <hop2_user>@<127.0.0.1>:~/asdf.txt
De cette façon, vous pouvez avoir un nombre arbitraire de sauts entre les deux, et il est plus facile de travailler avec en termes de chaînage de plus de deux sauts.