scp и rsync: как скопировать файлы на сервер по SSH
Для разового копирования файла на сервер подойдёт scp файл user@server:/путь/. Для папок и повторной синхронизации удобнее rsync -avz папка/ user@server:/путь/: он копирует только изменившиеся файлы и умеет возобновлять передачу.
scp: быстро скопировать
scp report.pdf user@server:/home/user/backup/ # файл на сервер
scp -r photos user@server:/home/user/backup/ # папка целиком
scp user@server:/home/user/backup/report.pdf ./ # с сервера на свой компьютер
scp -P 2222 report.pdf user@server:/home/user/backup/ # нестандартный порт SSH (большая P)
scp -i ~/.ssh/id_ed25519 report.pdf user@server:/home/user/backup/ # указать ключПорт в scp задаётся ключом -P с большой буквы, в ssh и rsync -e с маленькой -p.
rsync: синхронизировать
rsync -avz site/ user@server:/home/user/backup/site/Ключ | Что делает |
|---|---|
| Архивный режим: рекурсивно, с правами, датами и ссылками |
| Показывать, что копируется |
| Сжимать данные при передаче |
| Показывать ход передачи файлов |
| Только показать, что произойдёт, без копирования |
| Удалять на приёмнике файлы, которых нет в источнике |
| Не копировать файлы по маске |
| Задать порт или параметры SSH |
Косая черта в конце пути
Это самая частая причина путаницы:
Команда | Результат |
|---|---|
| Содержимое |
| Создаётся папка |
Косая черта у источника означает «содержимое папки», без неё копируется сама папка.
Сначала проверить
rsync -avzn --delete site/ user@server:/home/user/backup/site/Ключ -n покажет список изменений, включая удаляемые файлы. Если результат верный, повторите команду без -n.
Нестандартный порт, исключения, зеркало
rsync -avz -e "ssh -p 2222" --exclude='*.log' --exclude='cache/' site/ user@server:/home/user/backup/site/
rsync -avz --delete --progress site/ user@server:/home/user/backup/site/Копирование между папками на одном компьютере
rsync -a --delete site/ /home/user/mirror/site/Частые вопросы
Что лучше: scp или rsync?
scp проще для одного файла. rsync лучше для папок и повторных копирований: он передаёт только различия и умеет продолжать после обрыва. В новых версиях OpenSSH scp внутри использует протокол SFTP.
Как копировать без ввода пароля?
Настройте вход по ключу: создайте ssh-keygen -t ed25519 и добавьте публичный ключ на сервер командой ssh-copy-id user@server.
Как возобновить прерванную передачу большого файла?
Используйте rsync -avP файл user@server:/путь/: ключ -P включает --partial --progress и сохраняет частично переданные файлы.