В этой статье Вы узнаете, как обеспечить безопасную передачу файлов по протоколу SSH при помощи команды scp
в Linux. Каждый начинающий системный администратор должен освоить навыки работы с командной строкой (CLI — от англ. Command Line Interface). Потому что серверы под управлением Linux, как правило, лишены графического интерфейса и периферийных устройств, включая клавиатуры, мыши и мониторы. В результате основным способом взаимодействия с таким сервером остается подключение по протоколу SSH. При необходимости передачи файлов между локальным и удаленным компьютерами крайне важно соблюдать безопасность. Команда scp
позволит избежать перехвата ценных данных злоумышленниками.
Содержание:
- Что такое scp
- Что такое SSH
- Синтаксис команды scp
- Примеры команды scp в Linux
- Выводим в командную строку подробности о работе команды scp с помощью опции -v
- Сохраняем время изменения, время доступа и разрешения исходного файла с помощью опции -p
- Увеличиваем скорость передачи файлов командой scp с помощью опции -C
- Выбираем свой алгоритм шифрования файлов с помощью опции -c
- Ограничиваем скорость копирования командой scp с помощью опции -/
- Указываем конкретный порт для использования командой scp с помощью опции -P
- Рекурсивно копируем содержимое каталога командой scp с помощью опции -r
- Отключаем индикатор выполнения копирования и предупреждающее / диагностические сообщения команды scp с помощью опции -q
- Копируем файлы командой scp через прокси-сервер
- Выбираем другой файл ssh_config с помощью опции -F
- Выводы
Что такое scp
Утилита scp (от англ. Secure Copy) — это инструмент командной строки UNIX-подобных операционных систем, включая ОС семейства GNU / Linux, предназначенный для копирования файлов между компьютерами. При этом scp по умолчанию использует в качестве транспорта безопасный шифрованный протокол передачи данных — SSH. Утилита scp включена в состав пакета ПО OpenSSH для многих популярных дистрибутивов.
Что такое SSH
SSH (от англ. Secure Shell) — сетевой протокол прикладного уровня, предназначенный для удаленного управления операционными системами и безопасной передачи данных. Протокол шифрует весь трафик, включая передаваемые данные учетных записей пользователей. Через SSH можно реализовать безопасное использование других сетевых протоколов в потенциально незащищенной среде.
Синтаксис команды scp
Синтаксис команды scp
в общем случае имеет следующую структуру:
Где:
source_file_name
— название файла, который нужно скопировать;username
— имя учетной записи, созданной на целевом сервере;destination_host
— целевой удаленный сервер;destination_folder
— целевая директория, в которую нужно скопировать файл.
Кроме того, команда scp
имеет дополнительные опции, существенно расширяющие базовый функционал утилиты.
Важно: для выполнения копирования утилита запросит данные для авторизации на целевом сервере. Если вместо этого ввести логин и пароль от учетной записи на локальном компьютере — команда завершится ошибкой.
Примеры команды scp в Linux
Теперь давайте перейдем к примерам практического применения команды scp
в Linux.
Выводим в командную строку подробности о работе команды scp с помощью опции -v
По умолчанию команда scp
копирует файлы в фоновом режиме, то есть, пользователь видит их результаты только в двух случаях:
- копирование завершено успешно и файлы появились в целевом каталоге;
- в процессе выполнения копирования произошла ошибка.
Однако разработчики предусмотрели возможность вывода на экран отладочной информации о работе утилиты. Чтобы получать сообщения обо всех этапах работы утилиты — вводим в командную строку команду scp
с опцией -v
:
Пример вывода:
Использование этой опции поможет отследить этап работы команды, на котором возникает ошибка (например — с аутентификацией пользователя), и быстро устранить ее.
Сохраняем время изменения, время доступа и разрешения исходного файла с помощью опции -p
При копировании часто бывает полезным сохранить атрибуты исходного файла:
- время изменения;
- время доступа;
- настройки разрешений, владельца и группы владельца файла.
Для этого вводим в командную строку команду scp
с опцией -p
:
Пример вывода:
Как видите, при этом вывод команды содержит расчетное время выполнения копирования и скорость передачи данных.
Читайте также: Как заблокировать всю рекламу на всех устройствах на уровне DNS с помощью Pi-Hole на Raspberry Pi.
Увеличиваем скорость передачи файлов командой scp с помощью опции -C
Рассмотрим простой способ ускорить передачу данных при копировании на удаленный компьютер по протоколу SSH. Сделать это можно за счет сжатия данных перед их передачей. При этом в целевой каталог файлы поступят уже без сжатия — в исходном виде.
Давайте попробуем выяснить, насколько сильно сжатие экономит время. В качестве примера возьмем один и тот же файл размером 93 Мб. Для начала скопируем его без сжатия передаваемых данных. Для этого вводим в командную строку команду scp
с опциями -pv
(вывод отладочной информации и сохранение исходных атрибутов файла), но без опции -C
:
Пример вывода:
В результате файл скопировался за 1661,3 секунды. Теперь попробуем повторить процедуру, воспользовавшись функцией сжатия трафика. Для этого вводим в командную строку команду scp
с опциями -Cpv
:
Пример вывода:
На этот раз копирование файла завершилось за 162,5 секунд — быстрее более чем в 10 раз!
Конечно же, прирост скорости передачи данных возможен только с теми файлами, которые хорошо поддаются сжатию. При этом уже сжатые данные при использовании опции -C
будут передаваться с той же скоростью, что и без сжатия трафика. В качестве примеров можно привести следующие типы файлов:
- изображения (
*.jpeg
,*.gif
и т. п.); - сжатые архивы (
*.rar
,*.zip
и т. п.); - образы
*.iso
; - аудио- и видеозаписи.
При этом хорошо поддаются сжатию текстовые файлы, тогда как исполняемые файлы программ — чуть хуже.
Выбираем свой алгоритм шифрования файлов с помощью опции -c
По умолчанию команда scp
использует алгоритм AES-128 (от англ. Advanced Encryption Standard 128-bit) для шифрования файлов.
Однако разработчики предусмотрели возможность использования другого алгоритма — для этого вводим в командную строку команду scp
с опцией -c
и через пробел указываем в качестве дополнительного аргумента 3des
:
Пример вывода:
В таком случае вместо алгоритма AES-128 утилита будет использовать для шифрования трафика алгоритм 3des (Triple DES — блочный шифр на основе алгоритма DES) .
Важно: не перепутайте опции -c
и -C
при работе с командой scp
!
Читайте также: 15 полезных советов для системного администрирования Linux.
Ограничиваем скорость копирования командой scp с помощью опции -/
Допустим, Вы хотите скопировать на удаленный компьютер большой объем данных или настраиваете скрипт для автоматического обмена файлами по SSH. По умолчанию утилита будет использовать всю доступную Вам пропускную способность сетевого соединения. И это вполне нормально, если Вам нужно прежде всего быстро передать данные.
Однако для фонового копирования такой вариант не подойдет, так как не оставит ресурсов для выполнения других операций с сетью. Разработчики предусмотрели возможность урезать скорость копирования — для этого вводим в командную строку команду scp
с опцией -/
и через пробел указываем дополнительный аргумент 400
:
Пример вывода:
Введенный Вами числовой аргумент означает максимальную допустимую скорость передачи данных для команды scp
в кбит/с.
Важно: 8 бит равны 1 байту, то есть 400 кбит/с — равны 50 кбайт/с.
Указываем конкретный порт для использования командой scp с помощью опции -P
По умолчанию команда scp
использует для соединения с целевым удаленным компьютером порт 22. Однако в целях обеспечения безопасности полезно указать другой порт — для этого вводим в командную строку команду scp
с опцией -P
и через пробел указываем в качестве дополнительного аргумента номер порта:
Пример вывода:
Важно: не перепутайте опции -p
и -P
при работе с командой scp
!
Рекурсивно копируем содержимое каталога командой scp с помощью опции -r
Уметь безопасно копировать отдельные файлы по SSH — крайне полезный навык. Однако куда полезнее уметь скопировать целую папку со всем содержимым (файлами и подкаталогами). В этом Вам поможет возможность рекурсивного копирования — вводим в командную строку команду scp
с опцией -r
:
Пример вывода:
После завершения процесса копирования в целевом каталоге на удаленном сервере Вы найдете каталог Documents
со всеми его файлами и подкаталогами.
Отключаем индикатор выполнения копирования и предупреждающее / диагностические сообщения команды scp с помощью опции -q
Поговорим о том, как отключить выведение в командную строку индикатора выполнения копирования. А также — предотвратить вывод диагностических или предупреждающих сообщений от нее. Для этого вводим в командную строку команду scp
с опцией -q
:
Пример вывода:
В результате программа ограничиться лишь неизбежным запросом пароля от учетной записи на целевом сервере и больше не выведет никакой дополнительной информации.
Копируем файлы командой scp через прокси-сервер
Еще один интересный пример использования команды scp
— копирование файлов через прокси-сервер.
Что такое прокси-сервер
Прокси-сервер (от англ. Proxy) — это сервер-посредник, выполняющий функцию промежуточного звена в сетевом соединении между исходным и целевым компьютерами. Прокси-соединения могут использоваться для различных целей — от кэширования данных для более быстрого доступа до анонимизации.
Настраиваем автоматическое подключение команды scp к прокси-серверу
По умолчанию команда scp
лишена такой функции — Вам нужно будет дополнительно указать данные для соединения с промежуточным сервером-посредником. В качестве примера предположим, что Ваш прокси-сервер имеет IP-адрес 10.0.96.6 и использует для соединения порт 8080, а также предусматривает аутентификацию пользователя.
Прежде всего, создаем файл ~/.ssh/config
и добавляем в него следующую строку:
.
Проще всего сделать это одним из двух способов:
- перенаправление вывода — используем команду
cat > ~/.ssh/config
, вводим с клавиатуры содержимое файла (ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
) и нажимаем комбинацию клавиш Ctrl + D; - текстовый редактор — используем команду
vim ~/.ssh/config
либоnano ~/.ssh/config
, вводим текст с клавиатуры, сохраняем буфер в файл и выходим.
Далее — аналогичным образом создаем файл ~/.ssh/proxyauth
. И добавляем в него строку следующего вида:
Вместо myusername
указываем Ваше имя пользователя для аутентификации на прокси-сервере, а вместо mypassword
— соответствующий ему пароль.
Важно: поскольку файл ~/.ssh/proxyauth
содержит данные от Вашей учетной записи — доступ к нему должен быть разрешен только для Вас.
Устанавливаем corkscrew в Вашу ОС
Также для использования прокси-сервера Вам понадобится corkscrew.
Утилита corkscrew — это программа для UNIX-подобных операционных систем, предназначенная для туннелирования SSH-соединения через прокси-сервер. Стоит отметить, что corkscrew может отсутствовать в наборе предустановленного программного обеспечения Вашей операционной системе, тогда утилиту следует установить самостоятельно.
Устанавливаем corkscrew в дистрибутивах на основе Debian и Ubuntu
В дистрибутивах на основе Debian и Ubuntu для установки corkscrew вводим в командную строку от имени суперпользователя команду apt install
:
Устанавливаем corkscrew в дистрибутивах на основе RHEL и CentOS
В дистрибутивах на основе RHEL и CentOS для установки corkscrew вводим в командную строку от имени суперпользователя команду apt install
:
После этого Вы сможете работать с командой scp
как обычно — однако передача данных уже будет автоматически осуществляться через прокси-соединение.
Выбираем другой файл ssh_config с помощью опции -F
Предположим, что Вы успешно настроили использование прокси-сервера при работе с командой scp
, как это было показано в прошлом примере. И постоянно используете эту функцию, когда Ваш ноутбук подключен к сети компании. Однако в публичных сетях работаете без использования прокси-сервера.
В таком случае гораздо удобнее поместить настройки подключения к прокси-серверу в опциональный файл ssh_config
, расположенный в Вашем домашнем каталоге, и обращаться к нему только тогда, когда Вы подключены к сети компании. Для этого вводим в командную строку команду scp
с опцией -F
и путь к файлу /home/sedicomm-university/ssh_config
в качестве дополнительного аргумента:
Пример вывода:
Работая в публичной сети или дома — просто пропустите опцию -F
и путь к файлу при использовании команды scp
.
Читайте также: Как настроить резервное копирование и восстановление данных по сети с использованием Clonezilla.
Выводы
С помощью команды scp
можно безопасно копировать файлы и каталоги со всем содержимым между локальным и удаленным компьютерами. При этом использование зашифрованного соединения SSH гарантирует, что Ваши данные не станут легкой добычей для злоумышленников. Также утилита предусматривает возможность использования сторонних алгоритмов шифрования и прокси-соединений, обеспечивающих дополнительный уровень защиты. Уметь использовать команду scp
сегодня должен каждый системный администратор Linux
Спасибо за время, уделенное прочтению статьи!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.