Освоение SCP: Безопасная передача файлов между локальными и удаленными хостами
Изучите синтаксис scp для безопасной загрузки, скачивания, рекурсивного копирования, использования нестандартных SSH-портов и сохранения атрибутов файлов.
Освоение SCP: безопасная передача файлов между локальным и удаленным хостами
scp копирует файлы между машинами через SSH. Он полезен, когда вам нужно быстро и безопасно загрузить или скачать файл, и у вас уже есть SSH-доступ к серверу.
Для больших задач синхронизации, прерванных передач или повторяющихся развертываний обычно лучше подходит rsync. Для простых одноразовых копий scp прост и доступен в большинстве Unix-подобных систем.
Базовый синтаксис
scp [ОПЦИИ] ИСТОЧНИК НАЗНАЧЕНИЕ
Локальные пути выглядят как обычные пути к файлам. Удаленные пути используют следующую форму:
[пользователь@]хост:/путь/к/файлу
Если опустить пользователь@, scp использует ваше локальное имя пользователя для входа по SSH. Если удаленный SSH-сервер использует нестандартный порт, укажите -P с заглавной P. Строчная -p означает сохранение атрибутов файла.
Загрузка файла
Чтобы скопировать локальный файл на удаленный сервер:
scp local_report.txt [email protected]:/home/remote_user/documents/
Эта команда отправляет local_report.txt из вашей текущей директории в удаленную директорию documents.
Чтобы переименовать файл во время загрузки, укажите имя файла в назначении:
scp local_report.txt [email protected]:/home/remote_user/documents/report-2026.txt
Скачивание файла
Чтобы скопировать удаленный файл в вашу текущую локальную директорию:
scp [email protected]:~/server_log.tar.gz .
Чтобы сохранить его под другим локальным именем:
scp [email protected]:~/server_log.tar.gz ./prod-server-log.tar.gz
Рекурсивное копирование директории
Используйте -r для копирования дерева директорий:
scp -r local_project_folder [email protected]:/var/www/
Эта команда копирует директорию и ее содержимое в место назначения. Имейте в виду, что scp -r следует за символическими ссылками, встречающимися во время обхода, что может скопировать больше данных, чем вы ожидали.
Использование нестандартного SSH-порта
Если SSH прослушивает порт 2222, используйте заглавную -P:
scp -P 2222 local_config.ini [email protected]:/tmp/
Вы также можете указать порт в вашем SSH-конфиге, а затем использовать псевдоним хоста:
Host prod-web
HostName remote.example.com
User user
Port 2222
Затем:
scp local_config.ini prod-web:/tmp/
Сохранение времени и режимов
Используйте строчную -p для сохранения времени модификации, времени доступа и битов режима файла из источника:
scp -p important_script.sh user@server:/tmp/
Права собственности обычно не сохраняются так, как это делается с помощью архивных инструментов. Если права собственности важны, установите их после передачи или используйте процесс развертывания, предназначенный для этого требования.
Устранение неполадок с подробным режимом
Используйте -v для просмотра деталей SSH-подключения:
scp -v large_backup.zip user@server:/backups/
Подробный вывод помогает диагностировать ошибки аутентификации, проблемы с SSH-конфигом, проблемы с ключами хоста и неожиданные порты.
Включение сжатия, когда это помогает
-C передает сжатие SSH в соединение:
scp -C logs.txt user@server:/tmp/
Сжатие может помочь на медленных каналах с данными, содержащими много текста. Оно может не сильно помочь для уже сжатых файлов, таких как .zip, .gz, .jpg или .mp4.
Копирование между двумя удаленными хостами
Вы можете использовать scp с двумя удаленными путями:
scp user_a@server_alpha:/data/db.sql user_b@server_beta:/backup/
В текущем OpenSSH scp удаленные-удаленные копии по умолчанию передаются через вашу локальную машину. Используйте -R только когда вы намеренно хотите, чтобы исходный хост подключался напрямую к целевому хосту:
scp -R user_a@server_alpha:/data/db.sql user_b@server_beta:/backup/
С -R исходный хост должен иметь возможность аутентифицироваться на целевом хосте без запроса пароля.
Избегайте распространенных ошибок
Заключайте в кавычки удаленные пути, содержащие пробелы:
scp "local file.txt" 'user@server:/tmp/local file.txt'
Используйте абсолютные или четко относительные локальные пути, если локальное имя файла содержит двоеточие, потому что scp интерпретирует host:path как удаленный путь:
scp ./report:final.txt user@server:/tmp/
Дважды проверяйте пути назначения перед копированием от root или в системные директории. scp перезапишет существующий файл назначения без запроса в обычном режиме.
SCP или Rsync?
Используйте scp для простых безопасных копий:
- Загрузить один файл.
- Скачать один архив.
- Скопировать небольшую директорию один раз.
- Переместить данные в среде, где доступен только SSH.
Используйте rsync, когда вам нужны возобновляемые передачи, эффективные повторные синхронизации, обработка удаления, шаблоны исключения, контрольные суммы или лучший контроль прогресса.
Вывод
Используйте scp источник назначение для быстрой передачи файлов на основе SSH. Добавьте -r для директорий, -P для нестандартного SSH-порта, -p для сохранения времени и режимов, и -v, когда вам нужно устранить неполадки SSH-подключения.