Zastanawiam się, czy istnieje sposób na SCP pliku z hosta remote2 bezpośrednio z mojej maszyny lokalnej, przechodząc przez hosta remote1.
Sieci zezwalają na połączenia z hostem zdalnym2 tylko z hosta zdalnego1. Ponadto ani host zdalny1 ani host zdalny2 nie mogą scpować na moją maszynę lokalną.
Czy jest coś takiego:
scp user1@remote1:user2@remote2:file .
Pierwsze okno: ssh remote1
więc scp remot2:file .
.
Druga powłoka: scp remote1:file .
Pierwsze okno: rm file; logout
Mógłbym napisać skrypt wykonujący wszystkie te kroki, ale jeśli istnieje bezpośredni sposób, wolałbym go użyć.
Dzięki.
EDYCJA: Myślę o otwieraniu tuneli SSH, ale nie wiem, jaką wartość umieścić gdzie.
W tej chwili, aby uzyskać dostęp remote1
, mam następujące informacje $HOME/.ssh/config
na moim komputerze lokalnym.
Host remote1
User user1
Hostname localhost
Port 45678
Po włączeniu remote1
, aby uzyskać dostęp remote2
, jest to standardowy lokalny DNS i port 22. Co powinienem założyć remote1
i / lub zmienić localhost
?
-p 45678
się-p 22
jak mój remote1 SSH nasłuchuje na porcie 22-p 22
zamiast-p 45678
. U mnie teżscp -P 1234 ...
nie działa. Dostajęssh: connect to host localhost port 1234: Connection refused
. Kiedy próbowałemscp -P 22 ...
, działa, ale kopiuje plik do,remote 1
a nie na moją maszynę lokalną (remote2
).Podwójnie
ssh
Nawet w złożonym przypadku możesz obsłużyć transfer plików za pomocą jednej linii poleceń, po prostu za pomocą
ssh
;-)I jest to przydatne, jeśli
remote1
nie możesz się połączyćlocalhost
:tar
Ale tracisz właściwości pliku (własność, uprawnienia ...).
Jednak
tar
jest Twoim przyjacielem, jeśli chcesz zachować te właściwości pliku:Możesz także skompresować, aby zmniejszyć przepustowość sieci:
A
tar
także umożliwia przesyłanie katalogu rekurencyjnego przez podstawowessh
:ionice
Jeśli plik jest duży i nie chcesz przeszkadzać innym ważnym aplikacjom sieciowym, możesz przeoczyć ograniczenie przepustowości sieci zapewniane przez narzędzia
scp
irsync
(np.scp -l 1024 user@remote:file
Nie wykorzystuje więcej niż 1 Mb / s).Ale obejście polega
ionice
na zachowaniu jednego wiersza poleceń:Uwaga:
ionice
może nie być dostępne w starych dystrybucjach.źródło
To wystarczy:
Aby przeskoczyć plik
remote2
bezpośrednio z hosta , dodaj dwie opcje (Host
iProxyCommand
) do swojego pliku ~ / .ssh / config (zobacz również tę odpowiedź na superużytkowniku). Następnie możesz biegać:z lokalnego komputera bez zastanawiania się
remote1
.źródło
-o 'Host remote2'
nie wydaje się to być naprawdę wymagane podczas uruchamiania z wiersza poleceń (tj. Aby skopiować raz bez dotykania ~ / .ssh / config)-o 'Host remote2'
. Dzięki.Dzięki openssh w wersji 7.3 i nowszych jest to łatwe. Użyj opcji ProxyJump w pliku konfiguracyjnym.
Polecenia do uruchomienia w celu zalogowania lub skopiowania
oczywiście możesz określić host bastion Jump za pomocą opcji "-J" polecenia ssh, jeśli nie jest skonfigurowany w pliku konfiguracyjnym.
Uwaga SCP ma nie wydaje się wspierać flagę „-J” jak teraz. (Nie mogłem znaleźć na stronach podręcznika. Jednak powyżej scp działa z ustawieniem pliku konfiguracyjnego)
źródło
Jest nowa opcja
scp
dodania ostatnio dla dokładnie tej samej pracy, która jest bardzo wygodna-3
.TL; DR W przypadku obecnego hosta, który ma już skonfigurowane uwierzytelnianie w plikach konfiguracyjnych ssh, po prostu wykonaj:
Twój
scp
musi pochodzić z najnowszych wersji.Wszystkie inne wymienione techniki wymagają skonfigurowania uwierzytelniania od remote1 do remote2 lub odwrotnie, co nie zawsze jest dobrym pomysłem.
Argument
-3
oznacza, że chcesz przenieść pliki z dwóch zdalnych hostów, używając bieżącego hosta jako pośrednika, a ten host faktycznie przeprowadza uwierzytelnianie na obu zdalnych hostach, więc nie muszą mieć do siebie dostępu.Musisz tylko skonfigurować uwierzytelnianie w plikach konfiguracyjnych ssh, co jest dość łatwe i dobrze udokumentowane, a następnie po prostu uruchom polecenie w TL; DR
Źródłem tej odpowiedzi jest https://superuser.com/a/686527/713762
źródło
Ta konfiguracja działa dla mnie dobrze:
Potem polecenie
Kopiuje plik myfile na maszynę produkcyjną .
źródło
Mały dodatek do rozwiązania Olibre , z którym pracowałem używając tego źródła.
Tak jak masz trzy sposoby użycia
tar
do kopiowania ze zdalnego hosta do lokalnego, poniższe działa w przypadku kopiowania z lokalnego hosta do zdalnego hosta w podwójnych sytuacjach ssh: (uruchom je w katalogu, z którego pliki mają być skopiowane, w przeciwnym razie użyj pełnej ścieżki /Nazwa pliku)Prześlij pojedynczy plik bez kompresji:
Prześlij pojedynczy plik z kompresją:
Rekurencyjny transfer katalogu:
&& w tym miejscu zapobiega uruchomieniu polecenia, jeśli pierwsza połowa polecenia nie działa - na przykład jeśli brakuje katalogu lub występuje błąd w nazwach ścieżek źródłowych / docelowych.
źródło