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ąć?


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


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 user@your.server.example.com:/path/to/foo /home/user/Desktop/tobą powinien skończyć z Desktop/foo. Z scp -r user@your.server.example.com:/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


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


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.


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

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/

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 abc@10.70.12.12:/tmp/hotel_dump .

gdzie,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory

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żytkownika@192.168.10.123

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

Oto jeden przykład

wprowadź opis zdjęcia tutaj


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 ?.


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

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/

1
Zakładając, że użytkownik ma uprawnienia, czy możesz zrobić ścieżkę bezwzględną bez użyciaroot@
Jonathan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.