Pobierz pliki z serwera dwa kroki dalej [zamknięte]

14

Mamy następującą sytuację:

  1. Moja maszyna
  2. Maszyna bramowa
  3. Maszyna docelowa

Nie mam uprawnień roota zarówno na # 2, jak i # 3. Nie mogę też tak naprawdę przechowywać informacji (nie więcej niż 200 MiB) na komputerze nr 2 (ponieważ ma to być brama do reszty sieci, nie więcej). Na komputerze nr 3 znajduje się folder o wielkości około 3 GiB, który chcę skopiować do lokalnego. Nie mogę SSH od # 1 do # 3, ale mogę SSH do # 2, a następnie do # 3. Nie można również skonfigurować publicznej prywatnej pary kluczy między numerami 2 i 3, ale klucz kluczy zainstalowany jest między numerami 1 i 2.

Zwykle używam kombinacji SSH i tar, aby to zrobić:

ssh name@host "tar cf - folder" > folder.tar

Ale w tym przypadku wymagałoby to pewnego rodzaju zagnieżdżenia i nie mogę tego zrobić.

Jaki byłby dobry sposób na uzyskanie danych z punktu 3 do nr 1?

Cheiron
źródło

Odpowiedzi:

27

Możesz utworzyć tunel SSH przez maszynę2, a następnie w innej sesji połączyć się z tunelem.

Na przykład otwórz dwie sesje CLI na komputerze 1. W pierwszej sesji uruchom następujące czynności:

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

W drugiej sesji uruchom następujące czynności:

MACHINE1 $ ssh -p 2022 <user>@localhost

Pierwsze polecenie polega na tym, że port lokalny (2022 na komputerze 1) jest tunelowany do portu 22 na komputerze 3 przy użyciu połączenia SSH z komputerem 2.

Drugim poleceniem łączysz się z nowo otwartym portem lokalnym (2022) i to tak, jakbyś łączył się bezpośrednio z maszyną3.

Teraz, jeśli chcesz użyć typowego procesu przesyłania plików, możesz wykonać następujące czynności:

ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar

Alternatywnie możesz zapoznać się z rsync i zamiast tego zrobić coś takiego:

rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/

Zakładając, że celem końcowym nie jest zdobycie tarballa.

Gen
źródło
2
Za pomocą ProxyCommandi ssh -Wdwóch sshpoleceń można połączyć w jeden wiersz poleceń. Jeśli masz najnowszą wersję klienta OpenSSH, istnieje argument, który pozwoli ci to wszystko wykonać za pomocą jednego sshpolecenia.
kasperd
+1 dla rsync;)
NieDzejkob
Używam tar, ponieważ przesyłanie wielu plików zajmuje więcej czasu niż przesyłanie jednego dużego pliku. Czy rsync to rozwiązuje?
Cheiron
Podczas zdalnych transferów rsync sumuje kontrolowane dane w tranzycie (po stronie odbierającej, zanim zapisuje je na dysku), więc przesłanie pliku zajmie więcej czasu. To jednak dobrze spędzony czas.
Gene,
5

Możesz także skorzystać z możliwości sesji Master w nowszych wersjach SSH. Jest to opisane tutaj:

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

Prawdopodobnie wszystko, czego potrzebujesz, to edycja / tworzenie pliku .ssh / config. Dodaj definicje kontrolujące sesje główne:

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

Następnie możesz określić definicję serwera pierwszego skoku, na przykład:

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

Drugi przeskok wykorzysta serwer pierwszego przeskoku jako serwer proxy:

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

Nie zapomnij utworzyć katalogu ~ / .ssh / cm_socket, a uprawnienia do konfiguracji powinny wynosić 644.

Następnie powinieneś mieć możliwość SSH lub SCP bezpośrednio na / z drugiego serwera. Może być więcej takich serwerów.

Jaroslav Kucera
źródło
3
Po przeczytaniu twojego linku nie sądzę, że Multipleksowanie / ControlMasterjest potrzebne, aby przejść do proxy. Bardziej odpowiednia strona w tym wikibooku to ta: en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
IMSoP
Tak, zgadzam się. Istnieje wiele sposobów. Jednak sesję Master uważam za najbardziej elegancką. Chodzi tylko o osobiste preferencje ;-)
Jaroslav Kucera
Jeden z nas coś źle zrozumiał. Z tego, co widzę, „połączenie główne” dotyczy efektywnego wykorzystania zasobów sieciowych i nie ma nic wspólnego z pytaniem. Nie jest to inny sposób na zrobienie tego, jest po prostu nieistotny dla danego zadania.
IMSoP,