Czy możliwe jest SCP ze zdalnego na lokalny, gdy jest zalogowany do zdalnego i bez znajomości adresu IP lokalnego?

31

Często mam ochotę skopiować plik ze zdalnej sesji terminala na mój komputer lokalny. Zwykle wylogowuję się ze zdalnej sesji i dzwonię do przelewu scp z lokalnego, aby skopiować plik ze zdalnego do lokalnego. Ale wydaje się to trochę zbyt długie. Chciałbym przenieść plik, gdy jestem zalogowany do pilota przez SSH, aby zaoszczędzić czas. Moja lokalna maszyna jest podłączona do Internetu z dynamicznego zakresu adresów IP, więc nigdy nie jestem pewien, jak połączyć się z nią zdalnie. Ale z pewnością, ponieważ zdalna sesja pochodzi z mojego laptopa, musi istnieć skrót w scp, aby wrócić do mojego laptopa ... prawda?

jnthnclrk
źródło

Odpowiedzi:

20

Możesz do tego użyć tunelowania SSH .

Za pomocą tunelowania możesz przekierować port TCP z komputera lokalnego na komputer zdalny lub z komputera zdalnego na komputer lokalny. Używam go często, aby przekazywać np. Porty SMTP lub IMAP ze zdalnego komputera za zaporą ogniową na mój komputer lokalny (a następnie uzyskiwać dostęp do usług lokalnie, tak jakby były one uruchomione lokalnie).

Aby przekierować port 22 (SSH) z komputera lokalnego na komputer zdalny, wykonaj następujące czynności:

ssh -R12345:localhost:22 yourremoteuser@remotemachine

(Uwaga: localhost odnosi się do lokalnej nazwy zdalnego komputera)

Po uruchomieniu powinieneś być w stanie ssh z powrotem do domu za pomocą:

ssh -p12345 [email protected]

Korzystając z scp, zrobiłbyś coś takiego (scp ma wielką literę P do przekierowania portów):

scp -P12345 filename 127.0.0.1:/tmp/filename

Przekazywanie portów w innym kierunku (od zdalnego do lokalnego) używa -L zamiast -R.

Powyższe polecenia zakładają, że używasz terminalowego klienta ssh. Klienci graficzni, tacy jak PuTTY dla Windows, obsługują również tunelowanie

Daniel Lundmark
źródło
Nie odpowiada na pytanie OP, którego adres IP nie jest statyczny.
2
Chyba, że ​​coś przeoczyłem, powinno to być w porządku, aby OP mógł połączyć się z obecnie zdalnego komputera z powrotem do lokalnego. Tunelowanie zostanie wykonane za pośrednictwem sesji SSH. Ponieważ połączenie SSH jest konfigurowane z dynamicznej lokalnej maszyny do zdalnego, zakończy się sukcesem, dzięki czemu będzie mógł skonfigurować port nasłuchujący na zdalnej maszynie, który tuneluje z powrotem do miejsca, z którego przyszedł.
Będzie to wymagało OP do skonfigurowania serwera SSH na swoim komputerze lokalnym i zadbania o uwierzytelnienie. W niektórych przypadkach może to być większy problem niż jest to warte.
Septagram
Działa to nie tylko w przypadku dynamicznych adresów IP, ale także w zaporach ogniowych, które zabraniają połączeń ssh ze zdalnego na lokalne. Bardzo przydatna odpowiedź!
3
Możesz mieć to jeszcze wygodniejsze, ustawiając zdalne przekierowywanie portów z ~Cwyjściem. Po prostu wpisz <Enter>~C-R 12345:localhost:22<Enter>, a będziesz mieć swój tunel bez opuszczania już ustanowionej sesji SSH.
6

Spróbuj wykonać następujące czynności w wierszu polecenia na komputerze zdalnym, może być konieczne włączenie przekierowania portów na routerze.

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>

Źródło: łatwo zeskanuj plik z powrotem do hosta, z którego się łączysz (commandlinefu.com)

Patrick McLaren
źródło
1
Aby wyjaśnić, co to robi dla ludzi, z którymi się zetknąłeś, ${SSH_CLIENT%% *}wypisz adres IP swojego komputera lokalnego. Zatem całe polecenie otwiera sesję scp ze zdalnego komputera na komputer lokalny w celu przesłania plików. Można to zrobić tylko wtedy, gdy możesz SSH na komputerze lokalnym ze zdalnego komputera.
bizi
2
Można to jeszcze poprawić, dodając coś export ME="${SSH_CLIENT%% *}"do pliku rc powłoki. Możesz wtedy po prostu użyćscp <file> $ME:<local path>
kralyk
Świetnie, to działa, jednak uwaga: jeśli zalogujesz się przez VPN, pliki nie znajdą się na twoim komputerze, ale gdzie indziej.
kap
1

Może zssh ?

zssh (Zmodem SSH) to program do interaktywnego przesyłania plików do komputera zdalnego przy użyciu bezpiecznej powłoki (ssh). Ma to być wygodna alternatywa dla scp, umożliwiająca przesyłanie plików bez konieczności otwierania kolejnej sesji i ponownego uwierzytelniania.

zssh to interaktywne opakowanie dla ssh

Wykorzystuje czcigodne implementacje rz, sz transferu plików zmodem.

RedGrittyBrick
źródło
1

Przegłosowałem to pytanie, ale chciałbym to również łatwo osiągnąć .

Oto odpowiednia odpowiedź: w jaki sposób mogę SCP ze zdalnego komputera na lokalny, gdy jestem poza moją siecią domową?

Musisz zezwolić na dostęp do ssh spoza sieci. Odbywa się to poprzez przekazanie portu routera szerokopasmowego do sieci LAN serwera. Istnieją jednak pewne obawy związane z bezpieczeństwem zezwalające na dostęp ssh z zewnątrz, więc możesz również przyjrzeć się metodom zabezpieczania ssh, w szczególności uwierzytelniania opartego na kluczach i całkowitego wyłączenia uwierzytelniania hasłem.

Mars Robertson
źródło
0

Jednym z rozwiązań byłoby zawieszenie sesji ssh na komputerze lokalnym, wykonanie kopii na komputerze lokalnym, a następnie wznowienie sesji ssh w miejscu, w którym zostało przerwane.

Załóżmy na przykład, że mam połączenie z myuser @ remote i chcę skopiować plik lol.txt na mój komputer lokalny. Najpierw chcę zawiesić ssh na mojej lokalnej maszynie. Zwykle użyłbyś Ctrl- Zdo zawieszenia, ale to nie zadziała w ssh, ponieważ zostanie wysłany do zdalnej powłoki. Zamiast tego musisz użyć sekwencji ucieczki ssh Enter~. Aby zawiesić ssh naciśnij Enter~ Ctrl- Z. Teraz możesz uruchamiać polecenia na komputerze lokalnym i możesz to zrobić

user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt

aby skopiować plik, a następnie powrócić do ssh dokładnie tam, gdzie go zostawiłeś

user@localmachine:~$ fg


źródło
ale problem nie polega na kopiowaniu ze zdalnego, problem polega na kopiowaniu na zdalne, nie widzę, jak zawieszająca się powłoka ma coś wspólnego z tym ...
alex,
Cóż, działa to również w drugą stronę. Chodzi o to, aby zawiesić sesję zamiast wychodzić z niej, co czyni ją przynajmniej trochę łatwiejszą.
Steen Schütt,
0

Jeśli chcesz prostszego rozwiązania, po prostu otwórz konto Dropbox, przejdź do zdalnego komputera i uruchom wget (zmodyfikowana wersja tutaj ): wget --no-check-certificate https://www.dropbox.com/s/2123jshf/ABC.pdf?dl=1 -O abc.pdf

alex
źródło