Wiem, że to późna odpowiedź, ale właśnie znalazłem fajny sposób na zrobienie tego. Zasadniczo jest to odpowiedź Holgera Justa, ale w zapisanym pliku konfiguracyjnym:
Musisz umieścić to w swoim ~/.ssh/config
pliku na local.machine, (tworzenie pliku, jeśli nie istnieje)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
Po zapisaniu pliku możesz po prostu użyć
ssh target.machine
za każdym razem, gdy chcesz się połączyć. Scp również będzie działał, ponieważ respektuje również plik konfiguracyjny ssh. Podobnie Nautilus, jeśli korzystasz z GNOME i chcesz korzystać z GUI.
Host proxy.machine
linie w tym samym~/.ssh/config
pliku, 2) Wspomnij, czy te polecenia mogą być zagnieżdżone (tj. Klient łączy się z hostem proxy 1, który łączy się z hostem proxy 2, z którym się łączy. .. cel) i 3) conc %h %p
oznaczaMożesz to zrobić za pomocą jednego polecenia, ale na komputerze proxy musi być zainstalowany netcat (nc):
[EDYCJA: pomieszana kolejność maszyn ...]
źródło
Możesz teraz * zrobić to jako linijkę, nie wymagając
nc
nigdzie:Wyjaśnienie
pcreds
itcreds
przedstawiają swoje poświadczenia proxy i docelowy, jeśli wymagany (username
,username:password
, itd.).Jest to możliwe dzięki wbudowanej zdolności podobnej do netcat, co eliminuje konieczność
nc
używania hosta pośredniego. Za pomocąssh -W host:port
konfiguruje tunel do określonego hosta i portu i łączy go ze stdin / stdout, a następniescp
biegnie przez tunel.%h
I%p
wProxyCommand
są zastępowane docelowego hosta i portu można określić.Dla jeszcze większej wygody możesz skonfigurować proxy w konfiguracji ssh:
i odtąd po prostu rób
* od wersji OpenSSH 5.4 - wydanej w marcu 2010 r
źródło
-p <portnum>
przed-W
którąkolwiek z metod określania portu proxyJeśli nie masz nic przeciwko użyciu rsync zamiast scp, możesz użyć następującego jednowierszowego:
(będziesz potrzebować dostępu do maszyny proxy bez hasła)
źródło
OK, właściwie dwa polecenia ...
źródło
8080
-p <portnumber>
do polecenia sshJednowarstwowy? Nie z czubka mojej głowy. Najpierw musisz ustanowić proxy i nie możesz tego zrobić z samym SCP.
Robiąc to ręcznie, otwieram sesję ekranu dla mojego tunelu:
screen -S tunnel
Ekran służy do utrzymywania tunelu w powłoce tła. Użyj dowolnej techniki, aby tunel pozostawał otwarty w tle (odpowiedź @ weeheavy jest prawdopodobnie najprostsza). W sesji ekranowej tak zaczynam tunel
ssh -L 2222:target.machine:22 [user@]proxy.machine
Aby rozwiązać ten problem, w zasadzie mówi się: „Na moim komputerze lokalnym otwórz port 2222, a każde połączenie trafiające do hosta lokalnego: 2222 jest przekazywane przez proxy.machine do target.machine: 22”
Po ustanowieniu połączenia ssh i tunelu odłącz się od sesji ekranowej za pomocą „Ca d”. Aby wrócić do tej sesji ekranowej, wpisz
screen -raAd tunnel
Po powrocie do oryginalnej powłoki będzie wyglądało polecenie scp
scp -P 2222 localhost:your/file/on/target.machine local/path
Pamiętaj, że port localhost 2222 to tak naprawdę tunel prowadzący do target.machine.
źródło
Wygląda na to, że scp obsługuje opcję „-o”, podobnie jak ssh, chociaż nie jestem pewien, jak przekazać mu nazwę użytkownika / hasło proxy:
Jeśli otrzymasz,
nc: invalid option -- X
zobacz https://stackoverflow.com/a/23616021/32453źródło
Co powiesz na:
źródło
Możesz spróbować czegoś takiego:
Ale to nie zadziała, jeśli Twój serwer proxy.machine musi zapytać Cię o hasło (że SSH nie jest w TTY, więc askpass nie powiedzie się).
Jeśli masz więcej niż jeden plik, możesz użyć tar w ten sposób (niesprawdzony, zwykle używam w ten sposób netcata):
źródło
Innym prostym rozwiązaniem przeniesienia plik_zrodlowy z source_host Do destination_host za pośrednictwem proxy_host :
Zaloguj się na serwerze proxy :
Z serwera proxy, przenieść plik_zrodlowy z source_host do destination_host (można wpisać to jako jednej linii, pomijając
\
lub jako dwie linie, jak pokazano poniżej):Wymaga to, aby login na hoście_źródłowym do hosta_proxy używa klucza rsa.
źródło
Jeśli potrzebujesz użyć kluczy publicznych, potrzebujesz czegoś takiego.
źródło
Po przeczytaniu tego artykułu znalazłem odpowiedź, która działa dla mnie. (Ponieważ powyższe odpowiedzi nie działają dla mnie).
Jak
scp
uzyskać plik za pośrednictwem hosta pośredniego (aka Jump Host) http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.htmlMoja odpowiedź jest następująca:
Przykład:
Mam nadzieję, że ta odpowiedź może ci pomóc.
źródło