Jak skopiować folder ze zdalnego do lokalnego za pomocą scp? [Zamknięte]

2693

Jak skopiować folder ze zdalnego hosta na host lokalny scp?

Używam sshdo logowania mojego serwera.
Następnie chciałbym skopiować folder zdalny foodo lokalnego /home/user/Desktop.

Jak to osiągnąć?

Slasengger
źródło
61
Pytanie OP dotyczyło tego, czy możliwe jest skopiowanie pliku ze zdalnego na lokalny host, podczas gdy ssh'd na zdalny host . Nie jestem pewien, dlaczego żadna pojedyncza odpowiedź nie rozwiązała poprawnie jego pytania.
JeffDror,
3
Przesłanka pytania jest nieprawidłowa. Pomysł polega na tym, jak po zalogowaniu się do ssh przenieść pliki z zalogowanego komputera z powrotem do zalogowanego klienta. Jednak scp nie jest świadomy ani nie może używać połączenia ssh. Tworzy własne połączenia. Tak więc prostym rozwiązaniem jest utworzenie nowego okna terminala na lokalnej stacji roboczej i uruchomienie scp, który przenosi pliki ze zdalnego serwera na komputer lokalny. Np. Klucz scp -i użytkownik @ zdalny: / remote-dir / remote-file / local-dir / local-file
jeffmcneill
12
Pytanie może być nie na temat, ale jest to również najwyżej oceniany post w Google. Zablokowanie go oznacza, że ​​nikt nie może go zaktualizować, aby zapewnić lepsze rozwiązanie.
Alex Harvey
3
Niedawno zadałem podobne pytanie „nieco głębiej” dotyczące wierszy poleceń dla innego narzędzia w SuperUser i zostało ono przeniesione przez tamtejsze mody do StackOverflow. W każdym razie zgadzam się z twierdzeniem modów: Czy możemy PRZESUNIĘĆ to do SuperUser, odblokować go i otrzymać więcej odpowiedzi?
Nikhil VJ
3
Ogólnie rzecz biorąc, cała „nie-tematyczna” reakcja na przepełnienie stosu jest pojedynczą największą wadą platformy. Nadgorliwe oknówki.
AdamC,

Odpowiedzi:

4934
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

Nie dołączając końcowego „/” na końcu foo, przeniesiesz sam katalog (wraz z zawartością), a nie tylko zawartość katalogu.

Od man scp(patrz instrukcja online )

-r Rekurencyjnie kopiuj całe katalogi

Gryf
źródło
1408
Przeglądam to za każdym razem. Powiązany komiks: xkcd.com/1168
cptloop
10
Znalazłem dwa miłe do poznania : -Cflaga dodaje kompresję, a -cflaga pozwala przekazywać inne typy szyfrów dla lepszej wydajności, jak scp -c blowfish a@b:something . widać w odpowiedzi dimuthu
Automatico
79
użyj -p, aby zachować czasy modyfikacji plików, uprawnienia itp.! scp -pr user @ ...
Ber
27
W tej odpowiedzi brakuje ważnego wyjaśnienia. Skończy się z Desktop/foolub trzeba będzie Desktop/allcontentsofFooGohereSCP wydaje się działać dziwne czasami mi się to nie jedno, potem drugi
Toskan
7
@Toskan z scp -r [email protected]:/path/to/foo /home/user/Desktop/tobą powinien skończyć z Desktop/foo. Z scp -r [email protected]:/path/to/foo/. /home/user/Desktop/ tym skończysz z zawartością fooin Desktopi wszystkich sub-dirów fooporozrzucanych podDesktop
Ioannis,
306

Aby w pełni wykorzystać moc SCP , musisz przejść przez kolejne kroki:

  1. Autoryzacja klucza publicznego
  2. Utwórz aliasy ssh

Następnie, na przykład, jeśli masz to ~ / .ssh / config :

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

uratujesz się przed wprowadzaniem hasła i uprościsz scp składnię następujący sposób:

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

Ponadto będziesz mógł korzystać ze zdalnego uzupełniania ścieżek:

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

Aktualizacja:

Aby umożliwić zdalne zakończenie bash, musisz mieć powłokę bash na obu hostach <source>i <target>hostach oraz poprawnie działającą funkcję bash. Aby uzyskać więcej informacji, zobacz powiązane pytania:

Jak włączyć autouzupełnianie zdalnych ścieżek podczas korzystania z SCP?
Uzupełnianie zakładki SCP z nazwą pliku

Alexander Yancharuk
źródło
12
Nie wiedziałem o pliku konfiguracyjnym, to jest niesamowite!
dmastylo
Uzupełnianie tabulatorów to nonsens, po prostu kończy się dla mnie z lokalnego hosta.
Bernhard
14
@ b.long Pytanie brzmi: „Jak skopiować zdalny folder foo na lokalny pulpit”. Moja odpowiedź brzmi: „scp -r prod: / path / foo / home / user / Desktop” . Mam nadzieję, że widzisz relacje.
Alexander Yancharuk
2
@Bernhard Dla mnie było oczywiste, ponieważ używam powłoki bash. Dzięki za wskazanie mi tego! Odpowiedź zaktualizowana.
Alexander Yancharuk
1
@Alexander Yancharuk: Dzięki za odpowiedź, jest to bardziej szczegółowe niż tylko sama składnia.
Gladiator
216

Aby skopiować wszystko z lokalizacji lokalnej do lokalizacji zdalnej (przesyłanie)

scp -r /path/from/destination username@hostname:/path/to/destination

Aby skopiować wszystko z lokalizacji zdalnej do lokalizacji lokalnej (pobierz)

scp -r username@hostname:/path/from/destination /path/to/destination

Niestandardowy port, gdzie xxxxjest niestandardowy numer portu

 scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination

Skopiuj bieżący katalog ze zdalnego do lokalnego

scp -r username@hostname:/path/from/file .

Wsparcie:

  1. -r Rekurencyjnie kopiuj wszystkie katalogi i pliki
  2. Zawsze używaj pełnej lokalizacji z /, Uzyskaj pełną lokalizację przezpwd
  3. scp zastąpi wszystkie istniejące pliki
  4. hostname będzie nazwa hosta lub adres IP
  5. jeśli potrzebny jest port niestandardowy (oprócz portu 22), użyj -P portnumber
  6. . (kropka) - oznacza bieżący katalog roboczy, więc pobierz / skopiuj z serwera i wklej tylko tutaj.

Uwaga: Czasami niestandardowy port nie działa, ponieważ port nie jest dozwolony w zaporze, więc upewnij się, że niestandardowy port jest dozwolony w zaporze dla połączeń przychodzących i wychodzących

Shiv Singh
źródło
1
Wydaje się (przynajmniej w najnowszych wersjach Raspbian Jessie i Ubuntu), że scp używa -P (wielkie litery P) dla portu, podczas gdy (dziwnie) ssh używa -p (małe litery).
Adam Plocher
-p jest zarezerwowane dla zachowania „czasów modyfikacji, czasów dostępu i trybów z oryginalnego pliku”. Więc jeśli używasz tego do portu, prawdopodobnie nie działa ;-) Chyba że masz inną wersję, która inaczej używała małych liter p.
Adam Plocher
Z ssh tak. Nie z SCP (zakładam).
Adam Plocher
Co powinienem umieścić, jeśli katalog zawiera spację?
Brethlosze,
@hyprfrcb Użyj, pwdaby uzyskać lokalizację i użyj tego samego
Shiv Singh
48

Zawsze używam:

scp -r username@IP:/path/to/server/source/folder/  .

. (kropka) : to znaczy current folder. więc skopiuj z serwera i wklej tylko tutaj.

IP : może być adresem IP jak 125.55.41.311lub może być hostem ns1.mysite.com.

Manish Shrivastava
źródło
9
Dziękujemy za zwrócenie .uwagi na bieżący katalog!
ericmjl
35

Lepiej najpierw skompresować katalog na zdalnym serwerze:

tar czfP backup.tar.gz /path/to/catalog

Po drugie, pobierz ze zdalnego:

scp user@your.server.example.com:/path/to/backup.tar.gz .

Na koniec wypakuj pliki:

tar -xzvf backup.tar.gz
tylko ja
źródło
10
„Lepszy” zależy w dużej mierze od przesyłanych danych i wysiłku włożenia ssh na serwer w celu skompresowania / rozpakowania. I: możesz dodać kompresję do scp z -Cflagą, jak scp -C a@b:bigfile ..
Automatico
4
Przypomina mi to komentarz autorstwa @cptloop! : D xkcd.com/1168
GoodSp33d
22

A jeśli masz do cholery pliki do pobrania ze zdalnej lokalizacji i jeśli nie dbasz o bezpieczeństwo, spróbuj zmienić domyślne szyfrowanie scp (Triple-DES) na coś w rodzaju „blowfish”.

To znacznie skróci czas kopiowania plików.

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
dimuthu
źródło
2
Zgodnie z tym blogu pisać uzyskać jeszcze lepsze osiągi przy arcfourw zastępstwie blowfish, ale ma wady zabezpieczeń.
Automatico
20

Typowy scenariusz

scp -r -P port username@ip:/path-to-folder  .

wyjaśnione próbką,

scp -r -P 27000 [email protected]:/tmp/hotel_dump .

gdzie,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory
Arun G.
źródło
Dziękuję za odpowiedź. -P dla konkretnego portu SSH był dla mnie pomocny.
redoff
19

Przejdź do plików na pasku narzędzi Unity

wprowadź opis zdjęcia tutaj

Naciśnij Ctrl + l i napisz tutaj_nazwa_uż[email protected]

192.168.1.103 to host, z którym chcesz się połączyć.

Oto jeden przykład

wprowadź opis zdjęcia tutaj

Ronald
źródło
12

Pytanie brzmiało, jak skopiować folder ze zdalnego do lokalnego za pomocą scppolecenia.

$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

Ale jest lepszy sposób, aby to zrobić za pomocą sftp- SSH File Transfer Protocol (również Secure File Transfer Protocol, SFTP) to protokół sieciowy, który zapewnia dostęp do plików, transfer plików i zarządzanie plikami za pomocą dowolnego niezawodnego strumienia danych. (Wikipedia).

$ sftp user_remote@remote_ip

sftp> cd /path/to/remoteDir

sftp> get -r remoteDir

Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

Aby uzyskać pomoc dotyczącą sftppolecenia, wpisz helplub ?.

Fulvio
źródło
12

W przypadku napotkania „Zbyt wielu błędów uwierzytelnienia” , podaj dokładny klucz SSH dodany do serwera ssh serwera severs:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
kajzer
źródło
5

Nie wiem dlaczego, ale musiałem użyć folderu lokalnego przed dyrektywą serwera źródłowego. aby działało

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
Salem
źródło
1
Zakładając, że użytkownik ma uprawnienia, czy możesz zrobić ścieżkę bezwzględną bez użyciaroot@
Jonathan