Передача файлів через SSH [закрито]


461

Я SSHing на віддалений сервер в командному рядку і намагаюся скопіювати каталог на свою локальну машину за допомогою scpкоманди. Однак віддалений сервер повертає це повідомлення "використання":

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

Я хотів би мати можливість передавати файли в обох напрямках. З того, що я прочитав, я вважав, що вищевказана команда працюватиме як для завантаження, так і scp -p [localpath] [remotepath]для завантаження?

Відповіді:


734

Вам потрібно scpдесь десь. У вас є scp ./styles/, тож ви говорите захищену копію ./styles/, але не куди її копіювати.

Як правило, якщо ви хочете завантажити, це піде:

# download: remote -> local
scp user@remote_host:remote_file local_file 

де local_fileнасправді може бути каталог, в який слід розмістити файл, який ви копіюєте. Щоб завантажити, це навпаки:

# upload: local -> remote
scp local_file user@remote_host:remote_file

Якщо ви хочете скопіювати цілий каталог, вам знадобиться -r. Подумайте scpтак, як тільки cpви можете вказати файл user@remote_host:file, а також лише локальні файли.

Редагувати: Як зазначається в коментарі, якщо імена користувачів на локальних та віддалених хостах однакові, то користувача можна буде опустити, вказуючи віддалений файл.


2
Зауважте, що якщо користувач однаковий на віддаленому хості та локальному хості, ім’я користувача можна пропустити: scp hello.c myserver.net:~/projects/
strager

Так, правда, додам до цього записку. Я включив користувача, оскільки тоді приклади, які я наводив, завжди працюватимуть. :)
lemnisca

У мене важкий час на це .. це правильно. scp C: \ filename.txt server1 @ server2: home
Vincent

Будь ласка, додайте сміливе форматування на "donload" та "upload".
kursus

2
"природно" (я кажу, що я просто витрачав 15 хвилин на це), ви не повинні підключатися до віддаленого хоста під час спроби "завантажити" на локальний, тому що якщо ви виконуєте код з віддаленого примірника, "локальний" буде тлумачити як "віддалений", якщо ви бачите, що я маю на увазі. Тому не запускайте ssh спочатку.
PatrickT

164

Якщо ви копіюєте на / з настільного комп'ютера, використовуйте WinSCP або якщо на Linux, Nautilus підтримує SCP через опцію Підключити до сервера.

scp може копіювати файли лише на машину, на якій працює sshd, отже, вам потрібно запустити клієнтське програмне забезпечення на віддаленій машині з того, на якому запущений scp.

Якщо копіюєте в командному рядку, використовуйте:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

або

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile

4
Ти чоловік. Я розгорнув блог менш ніж за 10 секунд без додаткової установки на стороні сервера!
PM

2
Це спрацювало чудово. Я використовував msysgit в cmd, оскільки він має і scp, і ssh.
Ібн Саїд

3
Це спрацювало чудово. Я використав scp * user @ host: / path / to / where
Бастін Робін

3
Це має бути головна відповідь.
gsamaras

3
Дякуємо за пропозицію WinSCP. Шлях простіше, ніж намагатися написати всі ці команди вручну ...
Брайан Лейшман

23

Вам потрібно вказати і джерело, і місце призначення, а якщо ви хочете скопіювати каталоги, слід переглянути параметр -r.

Отже, щоб рекурсивно копіювати / home / user / що завгодно з віддаленого сервера у поточний каталог:

scp -pr user@remoteserver:whatever .

19

Ні, вам все одно потрібно в scp [from] [to]будь-який спосіб копіювання

Різниця в тому, що вам потрібно scp -p server:serverpath localpath


8
яка мета -p?
Qinjie

1
Від man scp: Зберігає час модифікації, час доступу та режими з вихідного файлу.
піміль

4
Щоб було зрозуміло -p, тут включено лише те, що ОП включила прапор у своє початкове запитання. Це ніяк не має відношення до відповіді
Гарет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.