Як скопіювати папку з віддаленої в локальну за допомогою scp? [зачинено]


2694

Як скопіювати папку з віддаленого на локальний хост за допомогою scp?

Я використовую sshдля входу на свій сервер.
Потім я хотів би скопіювати віддалену папку fooв локальну /home/user/Desktop.

Як я цього досягти?


61
Питання ОП полягало в тому, чи можна копіювати файл з віддаленого на локальний хост, а ssh'd - на віддалений хост . Я не впевнений, чому жодна відповідь не відповіла правильно на його питання.
JeffDror

3
Позиція питання невірна. Ідея полягає в тому, що після входу в ssh, як перемістити файли з авторизованої машини назад до клієнта, який увійшов у систему. Однак, scp не знає і не може використовувати ssh-з'єднання. Він здійснює власні зв’язки. Таким простим рішенням є створення нового вікна терміналу на локальній робочій станції та запуску scp, який передає файли з віддаленого сервера на локальну машину. Наприклад, scp -i ключ користувача @ віддалений: / remote-dir / remote-file / local-dir / local-file
jeffmcneill

12
Питання може бути поза темою, але це також найвищий рейтинг у Google. Якщо його заблокувати, це означає, що ніхто не може оновити його для кращого рішення.
Алекс Харві

3
Нещодавно я задав подібне "трохи глибше" питання щодо командних рядків для іншого інструменту на SuperUser, і його модники перенесли на StackOverflow. У будь-якому разі я згоден із твердженням модників: Чи можемо ми ПЕРЕМОГИТИ це на SuperUser, будь ласка, розблокувати його та отримати більше відповідей?
Нікхіл VJ

3
Взагалі, вся "поза тема" реакція на stackoverflow є найбільшою вадою платформи. Надмірні мартинети.
AdamC

Відповіді:


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

Не включаючи трейлінг '/' в кінці foo, ви будете переміщувати сам каталог (включаючи вміст), а не лише вміст каталогу.

Від man scp(Див. Онлайн-інструкцію )

-r Рекурсивно копіювати цілі каталоги


1408
Я щоразу переглядаю Google. Пов'язаний комікс: xkcd.com/1168
cptloop

10
Я знайшов два непоганих знань : -Cпрапор додає стиснення, і -cпрапор дозволяє переходити в інші типи шифрів для кращої продуктивності, як, наприклад scp -c blowfish a@b:something . , у відповіді dimuthu
Automatico

79
використання -p для збереження часу модифікації файлів, дозволів тощо! scp -pr user @ ...
Бер

27
Ця відповідь не має важливого пояснення. Чи закінчите ви, Desktop/fooчи будете мати, як Desktop/allcontentsofFooGohereздається, scp здається дивним, іноді для мене це робить одне, а інше
Тоскан

7
@Toskan з scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/вами повинен закінчитися Desktop/foo. З scp -r user@your.server.example.com:/path/to/foo/. /home/user/Desktop/ вами ви закінчите вміст fooу Desktopта всіх підручниках, fooвиведених підDesktop
Іоанніс

306

Щоб використовувати повну потужність scp , потрібно пройти наступні кроки:

  1. Авторизація відкритого ключа
  2. Створіть псевдоніми ssh

Тоді, наприклад, якщо у вас є цей ~ / .ssh / config :

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

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

ви вбережете себе від введення пароля та спростите синтаксис scp таким чином:

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

Більше того, ви зможете використовувати віддалене завершення шляху:

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

Оновлення:

Щоб увімкнути віддалене завершення bash, вам потрібно мати bash-shell <source>і на <target>хості, і на хостах, і правильно працювати з bash-завершенням. Для отримання додаткової інформації див відповідні питання:

Як включити автодоповнення для віддалених шляхів при використанні scp?
Завершення вкладки імені файлу SCP


12
Не знав про конфігураційний файл, це приголомшливо!
dmastylo

Завершення вкладки - це нісенітниця, просто заповнює місцевий хост для мене.
Бернхард

14
@ b.long Питання "Як скопіювати віддалений папку foo на локальний робочий стіл". Моя відповідь - "scp -r prod: / path / foo / home / user / Desktop" . Сподіваюся, ви зможете побачити відносини.
Олександр Янчарук

2
@Bernhard Для мене це очевидно, тому що я використовую bash-shell. Дякую, що вказали на мене! Відповідь оновлено.
Олександр Янчарук

1
@ Олександр Янчарук: Дякую за відповідь, це детальніше, ніж просто висвітлення синтаксису.
Гладіатор

216

Щоб скопіювати все з локального місцезнаходження у віддалене місцезнаходження (Завантажити)

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

Щоб скопіювати все з віддаленого місця на локальне місцезнаходження (завантажити)

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

Спеціальний порт, де xxxxє спеціальний номер порту

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

Скопіюйте в поточний каталог з віддаленого в локальний

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

Довідка:

  1. -r Рекурсивно копіюйте всі каталоги та файли
  2. Завжди використовуйте повне місцезнаходження від /, Отримайте повне місцезнаходження за адресоюpwd
  3. scp замінить усі існуючі файли
  4. hostname буде ім'ям хоста або IP-адресою
  5. якщо потрібний користувацький порт (крім порта 22) -P portnumber
  6. . (крапка) - це означає поточний робочий каталог, тому завантажуйте / копіюйте з сервера та вставте лише сюди.

Примітка. Іноді користувацький порт не працюватиме через те, що порт не допускається в брандмауері, тому переконайтеся, що користувальницький порт дозволений у брандмауері для вхідного та вихідного з'єднання.


1
Здається (щонайменше в останніх версіях Raspbian Jessie та Ubuntu) scp використовує -P (верхній регістр P) для порту, тоді як (як не дивно) ssh використовує -p (малі регістри).
Адам Плочер

-p зарезервовано для збереження "часу модифікації, часу доступу та режимів у вихідному файлі". Отже, якщо ви використовуєте це для порту, це, мабуть, не працює ;-) Якщо ви не маєте іншу версію, яка використовувала малі регістри p по-різному.
Адам Плочер

З ssh, так. Не з scp (я припускаю).
Адам Плочер

Що потрібно поставити, якщо каталог містить пробіл?
Brethlosze

@hyprfrcb Використовуйте, pwdщоб знайти місце та використовувати те саме
Shiv Singh

48

Я завжди використовую:

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

. (крапка) : значить current folder. тому скопіюйте з сервера і вставте лише сюди.

IP : може бути як IP-адреса, так 125.55.41.311і хост ns1.mysite.com.


9
Дякуємо, що вказали, що .стосується поточного каталогу!
ericmjl

35

Краще спершу стиснути каталог на віддаленому сервері:

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

По-друге, скачайте з віддаленого:

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

В кінці витягніть файли:

tar -xzvf backup.tar.gz

10
"Краще" сильно залежить від даних, які ви переносите, і зусиль, які потрібно зробити, щоб ssh на сервер здійснив блискавку / розпакування. І: ви можете додати компресію до scp із -Cпрапором, як scp -C a@b:bigfile ..
Automatico

4
Це нагадує мені коментар, зроблений @cptloop! : D xkcd.com/1168
GoodSp33d

22

І якщо у вас є пекельні файли для завантаження з віддаленого місця, і якщо ви не дуже дбаєте про безпеку, спробуйте змінити шифрування за замовчуванням scp (Triple-DES) на щось на кшталт "blowfish".

Це значно скоротить час копіювання файлів.

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

2
Відповідно до цієї публікації в блозі, ви отримуєте ще кращі показники роботи arcfourзамість цього blowfish, але він має вади безпеки.
Automatico

20

Типовий сценарій,

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

пояснено зразком,

scp -r -P 27000 abc@10.70.12.12:/tmp/hotel_dump .

де,

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

Дякую за відповідь. -P для конкретного порту SSH для мене було корисним.
повторно

19

Перейдіть до файлів на панелі інструментів єдності

введіть тут опис зображення

Натисніть Ctrl + l і напишіть here_goes_your_user_name@192.168.10.123

192.168.1.103 - хост, до якого потрібно підключитися.

Ось один приклад

введіть тут опис зображення


12

Питання полягало в тому, як скопіювати папку з віддаленої в локальну за допомогою scpкоманди.

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

Але ось кращий спосіб зробити це за допомогою sftp- протокол передачі файлів SSH (також протокол безпечної передачі файлів або SFTP) - це мережевий протокол, який забезпечує доступ до файлів, передачу файлів та управління файлами через будь-який надійний потік даних (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

Для довідки щодо sftpкоманди просто введіть helpабо ?.


12

Якщо ви зіткнулися з "Занадто багато збоїв аутентифікації" , вкажіть точний ключ SSH, який ви додали на свій ssh-сервер severs:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir

5

Не знаю чому, але мені довелося використовувати локальну папку перед директивою вихідного сервера. щоб змусити його працювати

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/

1
Якщо припустити, що користувач мав дозволи, ви можете зробити абсолютний шлях без використанняroot@
Джонатан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.