Передача файлов по 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]для загрузки?

бинарный омар
источник

Ответы:

735

Вам нужно 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так и только локальные файлы.

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

lemnisca
источник
2
Обратите внимание, что если пользователь является одним и тем же на удаленном хосте и локальном хосте, имя пользователя может быть опущено: scp hello.c myserver.net:~/projects/
strager
Да, правда, я добавлю заметку об этом. Я включил пользователя, потому что тогда приведенные мной примеры всегда будут работать. :)
lemnisca
У меня трудности с этим .. это правильно. scp C: \ filename.txt server1 @ server2: home
Винсент
Пожалуйста, добавьте форматирование жирным шрифтом на «donload» и «upload».
Курс
2
«естественно» (я говорю, естественно, потому что я потратил на это 15 минут), вам не следует подключаться к удаленному хосту при попытке «загрузить» локальный, потому что, если вы выполняете код из удаленного экземпляра, «локальный» будет интерпретировать как «удаленный», если вы понимаете, о чем я. Так что не запускайте сначала ssh.
PatrickT
164

Если вы копируете на / с вашего настольного компьютера, используете WinSCP или, если в Linux, Nautilus поддерживает SCP через опцию Connect To Server.

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
JeeBee
источник
4
Ты мужчина. Я развернул блог менее чем за 10 секунд без какой-либо дополнительной установки на стороне сервера!
PM
2
Это сработало отлично. Я использовал msysgit в cmd, так как он имеет как scp, так и ssh.
Ибн Саид
3
Это сработало отлично. Я использовал scp * user @ host: / path / to / where
Бастин Робин
3
Это должен быть главный ответ.
Гсамарас
3
Спасибо за предложение WinSCP. Гораздо проще, чем пытаться написать все эти команды вручную ...
Брайан Лейшман
23

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

Итак, чтобы рекурсивно скопировать / home / user / что угодно с удаленного сервера в ваш текущий каталог:

scp -pr user@remoteserver:whatever .
кругозор
источник
19

Нет, вам все равно нужно scp [from] [to]копировать

Разница в том, что вам нужно scp -p server:serverpath localpath

Gareth
источник
8
какова цель -p?
Циньцзе
1
From man scp: Сохраняет время изменения, время доступа и режимы из исходного файла.
pjmil
4
Чтобы быть понятным, -pвключается только здесь, потому что OP включил флаг в свой первоначальный вопрос. Это никак не связано с ответом
Гарет