Администраторы Linux должны быть знакомы с командной строкой. Поскольку GUI (Графический пользовательский интерфейс) в Linux-серверах обычно не устанавливается.
SSH может быть самым популярным протоколом для того, чтобы позволить администраторам Linux управлять серверами удаленно и безопасно. Встроенная команда SSH включает в себя команду SCP, которая используется для копирования файла(ов) между серверами безопасным способом.
Основы Синтаксиса Команды SCP
Нижеприведенная команда будет читаться как копирование “имя_исходного_файла” в “папку_назначения” на “узел_назначения” с использованием учетной записи “имя_пользователя“.
scp source_file_name username@destination_host:destination_folder
В команде SCP существует множество параметров, которые можно использовать. Вот параметры, которые могут использоваться в повседневном использовании.
Содержание Таблицы
Безопасное Перемещение Файлов в Linux
Базовый SCP команда без параметров будет копировать файлы в фоновом режиме. Пользователи ничего не увидят, если процесс не завершен или не появится какая-то ошибка.
Вы можете использовать параметр ” -v
” для вывода отладочной информации на экран. Он может помочь вам отладить проблемы с подключением, аутентификацией и конфигурацией.
Копировать Файл С Локального Хоста На Удаленный Сервер
Следующая команда копирует файл “scp-cheatsheet.pdf” с локальной системы на удаленную Linux систему в каталог /home/tecmint.
$ scp -v scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Пример вывода:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -t /home/tecmint/. OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_xmss type -1 ...
Копирование файла с удаленного хоста на локальный хост
Следующая команда копирует файл “ssh-cheatsheet.pdf” с удаленного хоста на локальную систему в каталог /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.
Пример вывода:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -f /home/ravi/ssh-cheatsheet.pdf OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 ...
Копирование файла с одного удаленного хоста на другой хост
Следующая команда копирует файл “ssh-cheatsheet.pdf” с одного удаленного хоста на другую удаленную систему в каталог /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf [email protected]:/home/anusha/.
Копирование файлов с исходным временем создания и датой
Параметр “-p
” сохранит исходные время модификации и время доступа к файлам при копировании файлов, а также на экране появится оценка времени и скорость соединения.
$ scp -p scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Пример вывода:
[email protected]'s password: scp-cheatsheet.pdf 100% 531 721.4KB/s 00:00
Сжатие при копировании файлов с помощью SCP
Один из параметров, который может ускорить передачу файлов, – это параметр “-C
“, который используется для сжатия ваших файлов на лету. Уникальное свойство заключается в том, что сжатие происходит только в сети. Когда файл прибывает на целевой сервер, он возвращается к исходному размеру до сжатия.
Взгляните на эти команды. Он использует один файл размером 93 Мб.
$ scp -pv messages.log [email protected]:.
Пример вывода:
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password [email protected]'s password: debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: Sending command: scp -v -p -t. File mtime 1323853868 atime 1380425711 Sending file timestamps: T1323853868 0 1380425711 0 messages.log 100% 93MB 58.6KB/s 27:05 Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds Bytes per second: sent 58758.4, received 15.6 debug1: Exit status 0
Копирование файлов без параметра “-C
” приведет к 1661,3 секундам. Вы можете сравнить результат с командой ниже, используя параметр “-C"
.
$ scp -Cpv messages.log [email protected]:.
Пример вывода:
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Host '202.x.x.x' is known and matches the RSA host key. debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Next authentication method: publickey debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password [email protected]'s password: debug1: Enabling compression at level 6. debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: channel 0: new [client-session] debug1: Sending command: scp -v -p -t . File mtime 1323853868 atime 1380428748 Sending file timestamps: T1323853868 0 1380428748 0 Sink: T1323853868 0 1380428748 0 Sending file modes: C0600 97517300 messages.log messages.log 100% 93MB 602.7KB/s 02:38 Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds Bytes per second: sent 54813.9, received 97.0 debug1: Exit status 0 debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09 debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48
Как видите, при использовании сжатия процесс передачи завершается за 162,5 секунд. Это 10 раз быстрее, чем без использования параметра “-C
“. Если вы копируете много файлов через сеть, параметр “-C
” поможет вам уменьшить общее время, необходимое для этого.
Следует отметить, что метод сжатия не будет работать на любых файлах. Если исходный файл уже сжат, вы не обнаружите там никакого улучшения. Файлы, такие как .zip, .rar, картинки и .iso файлы не будут затронуты параметром “-C
“.
Изменение шифра SCP для шифрования файлов
По умолчанию, SCP использует “AES-128” для шифрования файлов. Если вы хотите изменить шифр для шифрования, вы можете использовать параметр “-c
“.
Посмотрите на эту команду.
$ scp -c 3des Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
Вышеуказанная команда говорит SCP использовать алгоритм 3des для шифрования файла. Будьте внимательны, что этот параметр использует “-c
“, а не “-C
“.
Ограничение использования пропускной способности с помощью команды SCP
Еще один полезный параметр – это параметр “-l
“. Параметр “-l” ограничит использование пропускной способности. Это может быть полезно, если вы делаете автоматизированный сценарий для копирования множества файлов, но не хотите, чтобы пропускная способность была истощена процессом SCP.
$ scp -l 400 Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 50.3KB/s 01:13
Значение 400 после параметра “-l
” означает, что мы ограничиваем пропускную способность для процесса SCP только 50 KB/sec.
Одна вещь, которую следует помнить, это то, что пропускная способность указывается в килобитах/сек (kbps). Это означает, что 8 бит равны 1 байту.
В то время как SCP считается в килобайтах/сек (КБ/с). Таким образом, если вы хотите ограничить пропускную способность максимум до SCP только 50 КБ/с, вам нужно установить его на 50 x 8 = 400.
SCP с другим портом
Обычно SCP использует порт 22 в качестве стандартного порта, но по соображениям безопасности вы можете изменить порт на другой. Например, мы используем порт 2249.
Затем команда должна выглядеть следующим образом.
$ scp -P 2249 Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 262.3KB/s 00:14
Убедитесь, что используется заглавная буква “P”, а не строчная “p”, поскольку “p” уже используется для сохранения времени и режимов.
SCP – Копирование файлов и каталогов рекурсивно
Иногда нам нужно скопировать каталог и все файлы/каталоги внутри него. Было бы лучше, если бы мы могли сделать это в одной команде с использованием параметра “r”, который копирует весь каталог рекурсивно.
$ scp -r documents [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13 scp.txt 100% 10KB 9.8KB/s 00:00
После завершения процесса копирования на сервере назначения вы найдете каталог с именем “документы” со всеми его файлами. Папка “документы” создается автоматически.
SCP – Отключение сообщений о прогрессе
Если вы решите не видеть индикатор прогресса и предупреждающие/диагностические сообщения от SCP, вы можете отключить их с помощью параметра “-q
“. Вот пример.
$ scp -q Label.pdf [email protected]:. [email protected]'s password: pungki@mint ~/Documents $
Как видите, после ввода пароля нет никакой информации о процессе SCP. После завершения процесса вы увидите приглашение снова.
SCP – Копирование файлов через прокси
Прокси-сервер обычно используется в офисной среде. Встроенно, SCP не настроен на использование прокси. Когда ваша среда использует прокси, вам нужно “сказать” SCP общаться через прокси.
Вот сценарий. Адрес прокси – 10.0.96.6, а порт прокси – 8080. Прокси также реализован с аутентификацией пользователей. Во-первых, вам нужно создать файл “~/.ssh/config“. Во-вторых, вы должны поместить эту команду внутрь него.
ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
Затем вам нужно создать файл “~/.ssh/proxyauth“, который содержит.
myusername:mypassword
После этого вы можете использовать SCP прозрачно, как обычно.
Обратите внимание, что corkscrew может еще не быть установлен на вашей системе. На моем Linux Mint мне нужно было сначала его установить, используя стандартную процедуру установки Linux Mint.
$ apt-get install corkscrew
Для других систем на базе yum, пользователи могут установить corkscrew, используя следующую команду yum.
# yum install corkscrew
Другое дело, поскольку файл “~/.ssh/proxyauth” содержит ваше имя “пользователя” и “пароль” в открытом виде, убедитесь, что файл доступен только вам.
Выберите Другой файл ssh_config
Для мобильных пользователей, которые часто переключаются между корпоративными сетями и общественными сетями, всегда изменять настройки в SCP будет мучительно. Лучше, если мы сможем поместить другой файл ssh_config, соответствующий нашим потребностям.
Прокси используется в корпоративной сети, но не в общественной сети, и вы регулярно переключаетесь между сетями.
$ scp -F /home/pungki/proxy_ssh_config Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
По умолчанию файл “ssh_config” для каждого пользователя будет размещен в “~/.ssh/config“. Создание конкретного файла “ssh_config” с поддержкой прокси облегчит переключение между сетями.
Когда вы находитесь в корпоративной сети, вы можете использовать параметр “-F
“. Когда вы находитесь в общественной сети, вы можете пропустить параметр “-F
“.
Это все о SCP. Вы можете посмотреть страницы руководства о SCP для получения более подробной информации. Не стесняйтесь оставлять комментарии и предложения.