Możesz to również zrobić w odwrotnej kolejności i może to być łatwiejsze.
Załóżmy, że masz otwartą sesję ssh na maszynie, do której chcesz wysłać plik. Ten komputer z najdalszym przeskokiem nazwiemy hop2. Twoim hostem „proxy” będzie hop1. Komputer będący źródłem pliku, nazwiemy to źródłem.
origin:~/asdf.txt --> hop1 --> hop2:~/asdf.txt
Możesz budować tunele udostępniające port lokalny na zdalnym komputerze. W ten sposób definiujemy port do otwarcia na zdalnym komputerze, który będzie przekierowaniem do portu, który ściągnąłeś ze sobą podczas budowy tunelu.
Na 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
Teraz w tej otwartej sesji tunelowej możesz zrobić to samo od hop1 do file_origin.
Na skoku 1:
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.
Jesteś teraz tunelowany od hop2 do hop1 do źródła. Nawiasem mówiąc, teraz zarówno port 5555, jak i 6666 są otwarte w momencie nadejścia, które są przekierowaniami do portu 22 hop2. W ramach tej sesji oba poniższe są poprawnymi trasami SCP do hop2:
W miejscu pochodzenia:
scp -P 6666 ~/asdf.txt <hop2_user>@<127.0.0.1>:~/asdf.txt
W ten sposób możesz mieć dowolną liczbę przeskoków pomiędzy nimi, a łatwiej jest pracować pod względem łączenia razem więcej niż dwóch przeskoków.