Linux-администратор должен уверенно владеть интерфейсом командной строки, так как на большинстве Linux-серверов не устанавливается графическая оболочка. SSH является наиболее популярным протоколом, который обеспечивает администратору возможность безопасного удаленного управления сервером. Для безопасного копирования файлов между серверами с использованием этого протокола используется команда scp (secure copy – безопасное копирование). В данном руководстве мы рассмотрим основы работы с командой scp и наиболее важные опции.
Базовый синтаксис
Команда scp выглядит следующим образом
scp [опции] имя_файла пользователь@узел_назначения:директория_назначения
Данная команда выполняет копирование указанного файла (имя_файла) в конкретную директорию (директория_назначения) на узле назначения (узел_назначения) с использованием учетной записи определенного пользователя (пользователь).
Подробная информация о процессе копирования
При запуске без параметров команда scp будет копировать файлы в фоновом режиме. Пользователь ничего не видит, пока процесс не будет завершен, или не возникнет какая-либо ошибка. Для вывода подробной информации о процессе копирования на экран можно воспользоваться параметром –v. Это может помочь в отладке проблем соединения, аутентификации и конфигурации.
$ scp -v file.pdf root@10.10.10.2:.
Сохранение значений атрибутов
Для копирования файлов с сохранением времени доступа, модификации и прав доступа используется опция –p. На экране отобразятся примерное время выполнения и скорость соединения:
# scp -p file.pdf root@10.10.10.2:. root@10.10.10.2's password: file.pdf 100% 1000MB 58.0MB/s 00:17 100% 1000MB 58.0MB/s 00:17
Сжатие файлов при передаче
Опция –C поможет ускорить передачу файлов за счет их сжатия. Преимущество такой передачи в том, что сжатие будет выполняться только для передачи по сети. При завершении копирования на сервере места назначения размер файла вернется к первоначальному, каким он был до сжатия.
Допустим, требуется скопировать файл размером 1 ГБ. Следующая команда выполнит это без сжатия:
# scp -vp file.pdf root@10.10.10.2:/tmp
Время копирования составило 20.3 секунды. Теперь выполним копирование с параметром –C:
scp -Cvp file.pdf root@10.10.10.2:/tmp
Видно, что при использовании сжатия процесс передачи требует всего 3,4 секунды. Это более чем в 6 раз быстрее. Однако, важно отметить, что сжатие работает не для всех файлов. При копировании уже сжатых файлов никакого ускорения не будет, поэтому на архивы, изображения и файлы образов этот параметр не действует.
Выбор алгоритма шифрования
По умолчанию scp использует для шифрования файлов алгоритм AES-128. Если требуется другой алгоритм, его можно изменить при помощи опции -c:
# scp -c 3des file.pdf root@10.10.10.2:/tmp root@10.10.10.2's password: file.pdf 100% 1000MB 19.0MB/s 00:52
В данном случае задан алгоритм 3DES. Обратите внимание, что данный параметр указывается маленькой буквой -с, а не большой -C.
Ограничение скорости передачи
Опция -l ограничивает скорость передачи, указывается в кбит/c. Она полезна для использования в скриптах для автоматического копирования большого количества файлов, чтобы процесс scp не занимал весь канал.
# scp -l 40000 file.pdf root@10.10.10.2:/tmp root@10.10.10.2's password: file.pdf 100% 1000MB 4.9MB/s 03:24
После параметра указывается значение ограничения скорости в килобитах в секунду, а при передаче скорость отображается в килобайтах в секунду. В данном случае мы указали 400 кбит/с, что эквивалентно 50 кбайт/с, так как в одном байте 8 бит (400/8 = 50).
Выбор порта для scp
Обычно scp по умолчанию использует порт 22, но в целях безопасности может потребоваться его изменить. Для этого применяется опция -P. Например, если мы используем порт 2249:
# scp -P 2249 file.pdf root@10.10.10.2:/tmp
Убедитесь, что буква заглавная, так как строчная p используется для сохранения атрибутов.
Рекурсивное копирование каталогов
Если требуется копирование директории со всеми поддиректориями и файлами внутри, лучше сделать это одной командой. В scp для этого используется параметр -r:
scp -r /root/documents root@10.10.10.2:.
После завершения процесса копирования на сервере места назначения появится директория documents со всеми файлами, которая будет создана автоматически.
Отключение отображения прогресса и служебных сообщений
Если вы не хотите видеть прогресс выполнения операции, предупреждения и диагностические сообщения scp, их можно отключить параметром
# scp -q label.pdf root@10.10.10.2:.
После ввода пароля не отображается никакой информации о работе команды. После завершения процесса копирования вы снова увидите командную строку.
Копирование файлов через прокси
В офисных сетях часто используются прокси-серверы. Изначально scp не настроена для работы через прокси, поэтому если вы используете прокси-сервер, нужно «сообщить» об этом команде. Для работы протокола SSH через прокси-сервер требуется туннелирование, которое осуществляется при помощи специальной программы Corkscrew. В вашей системе она может быть не установлена, в этом случае нужно воспользоваться стандартной процедурой установки:
Ubuntu/Debian
$ apt-get install corkscrew
Centos/Redhat
# yum install corkscrew
Допустим, адрес вашего прокси-сервера 10.0.96.6, а порт 8080, и на сервере требуется аутентификация пользователя. Нужно создать файл ~/.ssh/config и прописать там следующую команду:
ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
Затем нужно создать файл ~/.ssh/proxyauth, содержащий имя пользователя и пароль для аутентификации на прокси-сервере в следующем формате:
имя:пароль
Теперь можно использовать scp в прозрачном режиме, как обычно. Необходимо исключить доступ посторонних лиц к файлу ~/.ssh/proxyauth, потому что в нем открытым текстом указаны имя пользователя и пароль.
Выбор другого файла конфигурации
Мобильным пользователям, которые попеременно используют сеть компании и публичные сети, будет тяжело каждый раз менять настройки scp. Лучше всего создать для этого отдельный файл ssh_config и воспользоваться параметром -F.
По умолчанию файл ssh_config для пользователя находится в ~/.ssh/config. Если создать отдельный файл proxy_ssh_config для использования прокси, это упростит переход между сетями.
Например, если в сети компании используется прокси-сервер, а в публичной сети – нет, а пользователь попеременно работает в разных сетях, можно использовать опцию -F с именем нужного файла конфигурации для сети компании, а в публичной сети ее не указывать:
# scp -F /home/user/proxy_ssh_config Label.pdf root@10.10.10.2:.
Заключение
Мы рассмотрели наиболее распространенные примеры работы с командой scp. Более подробную информацию можно получить в соответствующих man-страницах.