Как безопасно передавать файлы в Linux с помощью SCP

Scp Transfer Linux 00 Featured Image

При передаче файлов на удаленный сервер Linux у вас есть несколько вариантов. Один из лучших способов — использовать программу под названием Secure Copy или SCP, которая работает через протокол SSH для быстрой передачи файлов по вашей сети на удаленную систему. Этот учебник показывает, как безопасно передавать файлы с помощью SCP в Linux.

Содержание

  • Настройка SSH
  • Подключение к вашей системе через SSH
  • Использование SCP для передачи файлов
  • Сжатие передачи файлов в SCP
  • Оптимизация передачи данных с SCP
  • Ограничение использования полосы пропускания в SCP
  • Передача от удаленного к удаленному с помощью SCP
  • Использование прокси с SCP
  • Изменение стандартного порта в SCP
  • Использование тихого режима SCP
  • Часто задаваемые вопросы

Настройка SSH

На вашем удаленном сервере вам потребуется установить сервер SSH. Наиболее распространенным в Linux является сервер OpenSSH. Чтобы установить его, выполните одну из следующих команд:

# Сервер на базе Debian/Ubuntu  
sudo apt install ssh  
  
# Fedora  
sudo dnf install openssh

Scp Transfer Linux 01 Installing Ssh

В зависимости от вашей дистрибуции вам может потребоваться разрешить SSH через некоторые программные файерволы. В Ubuntu эта проблема отсутствует, но в Fedora вам также нужно будет выполнить следующие команды:

sudo firewall-cmd --add-service=ssh --permanent  
sudo firewall-cmd --reload

Scp Transfer Linux 02 Fedora Enable Firewall

Подключение к вашей системе через SSH

Перед тем как подключиться через SSH, вам нужно узнать IP-адрес удаленного сервера. На графических серверах IP-адрес отображается в апплете сети в системных настройках. На большинстве серверов вам следует использовать команду ip в терминале.

ip addr

Scp Transfer Linux 04 Check Ip Address

В выводе найдите строку, начинающуюся с inet под ethX или enpXsy, в зависимости от того, как ваш сетевой интерфейс подключен к системе. В моем случае это 192.168.68.108.

Чтобы протестировать соединение SSH, перейдите на другой компьютер с Linux и введите:

Замените “user” на фактическое имя пользователя на сервере.

Scp Transfer Linux 05 Connecting To Remote Server

Введите пароль этой учетной записи, и вы сможете работать. Если вы получите вопрос о “достоверности хоста, который не может быть установлен”, просто ответьте “да”. Это проверка безопасности, предназначенная для того, чтобы убедиться, что вы подключаетесь к вашему фактическому серверу, а не к мошеннику. Вы должны увидеть тот же запрос на вашей клиентской системе, который вы видите при входе напрямую на сервер, что означает, что ваше соединение было успешным. Вы также должны настроить ваши SSH-соединения для максимальной безопасности или даже настроить двухфакторную аутентификацию перед тем, как перейти к следующему шагу.

Использование SCP для передачи файлов

Теперь, когда вы протестировали соединение SSH, начните копировать файлы между двумя машинами. Безопасная передача осуществляется с помощью команды scp. Основной формат команды scp выглядит следующим образом:

scp /PATH/TO/FILE USER@IP-ADDRESS:PATH/TO/DESIRED/DESTINATION

Например, чтобы скопировать файл “backup.tar.gz” с локального компьютера в папку “backups” домашнего каталога пользователя “ramces” на удаленном сервере с IP-адресом 192.168.68.165, используйте:

scp backup.tar.gz [email protected]:~/backups/

Scp Transfer Linux 06 Basic Copying

Аналогично, когда вы подключаетесь с помощью ssh, вам будет предложено ввести пароль. Вам не предложат ввести имя пользователя, так как оно указано в команде.

Вы также можете использовать подстановочные знаки, такие как следующие:

scp *.tar.gz [email protected]:~/backups/

Scp Transfer Linux 07 Glob Matching Copy

Чтобы скопировать файл с удаленного сервера на локальный компьютер, просто измените параметры местами:

scp [email protected]:~/backups/backup.tar.gz ./

Scp Transfer Linux 08 Inverse Copying

Обратите внимание на точку в конце команды? Это означает “текущую директорию”, как это делается со стандартными командами cp или mv. Вы также можете легко указать другую директорию, если захотите.

scp -r [email protected]:~/backups/ backups-from-server/

И то же самое с подстановочными знаками:

scp [email protected]:~/backups/*.txz ./

Чтобы рекурсивно скопировать директорию на удаленный сервер, используйте опцию -r:

scp -r backups/ [email protected]:~/backups/

Scp Transfer Linux 09 Recursive Copying

Чтобы скопировать рекурсивно директорию с удаленного сервера на локальный компьютер, используйте:

scp -r [email protected]:~/backups/ ./

Scp Transfer Linux 10 Reverse Recursive Copying

Сжатие передачи файлов в SCP

Помимо базового копирования, также возможно изменить поведение SCP во время этих передач файлов. Например, вы можете использовать флаг -C, чтобы сжать данные, которые SCP отправляет удаленным клиентам:

scp -C backup.tar.gz [email protected]:/home/ramces/

Эта опция работает, сжимая каждый пакет данных по мере его отправки через программу SCP. Поэтому это может быть невероятно полезно, если у вас ограниченное подключение по полосе пропускания и вы хотите надежно отправить файл на удаленный сервер.

Scp Transfer Linux 11 Data Compression Copy

Аналогично приведенным выше опциям, вы также можете использовать -C вместе с флагом -r, чтобы рекурсивно сжимать и передавать файлы на удаленную машину. Например, следующая команда сжимает и получает файл “backup.tar.gz” с моего удаленного сервера:

scp -Cr [email protected]:/home/ramces/backups /home/ramces/

Scp Transfer Linux 12 Reverse Data Compression Copy

Оптимизация передачи данных с SCP

В большинстве случаев SCP пытается использовать алгоритм шифрования AES-128 для всех своих передач файлов. Однако есть случаи, когда этот конкретный алгоритм может оказаться неподходящим для файлов, которые вы хотите передать.

С учетом этого, возможно еще больше оптимизировать и защищать SCP, изменив алгоритм шифрования для конкретной передачи. Для этого вам нужно использовать флаг -c, за которым следует шифр, который вы хотите использовать.

Например, следующая команда передает файл “backup.tar.gz” на мой удаленный сервер с использованием AES-256:

scp -c aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 13 Change Default Cipher

Кроме того, опция -c также позволяет вам указать список шифров, которые вы хотите использовать для конкретной передачи файла. Например, следующая команда использует как AES-192, так и AES-256 при передаче файла “backup.tar.gz” на мой удаленный сервер:

scp -c aes192-ctr,aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 14 Create Cipher Preference List

Ограничение использования полосы пропускания в SCP

Хотя сжатие пакетов файлов может помочь вам использовать SCP в плохих сетевых условиях, также возможно ограничить полосу пропускания, которую программа использует во время передачи. Это полезно в случаях, когда вы используете подключение с учетом трафика и не хотите, чтобы SCP занимал всю полосу вашего сетевого соединения.

Чтобы ограничить эффективную полосу пропускания программы, вы должны использовать флаг -l, за которым следует верхний предел, который вы хотите в килобитах в секунду (Kb/s). Например, выполнение следующей команды передаст файл “backup.tar.gz” на мой удаленный сервер с эффективной полосой пропускания 1,600 Kb/s:

scp -l 1600 ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 15 Limit Bandwidth During Copy

Передача от удаленного к удаленному с помощью SCP

Помимо копирования локальных файлов на ваш удаленный сервер и наоборот, вы также можете использовать SCP для управления несколькими удаленными серверами с вашего локального компьютера, так как SCP просто занимается передачей файлов и не различает локальную и удаленную машины.

Чтобы передать между двумя удаленными серверами, вам нужно четко указать имя пользователя и адрес каждой из этих машин. Например, выполнение следующей команды передаст мой файл “remote-backup.tar.gz” между двумя удаленными серверами:

scp [email protected]:/home/ramces/remote-backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 16 Remote To Remote Copy

Использование прокси с SCP

По умолчанию SCP использует IP-адрес вашего локального компьютера всякий раз, когда он передает файлы между разными хостами. Хотя это вполне нормально в обычных ситуациях, это может быть проблемой, если ваша локальная сеть ограничивает любую активность SCP. Один быстрый способ справиться с этой проблемой — передать ваше локальное соединение через SSH-прокси.

Для этого вам нужно использовать флаг -o, за которым следует опция ProxyCommand. Это позволяет вам создать базовое SSH-соединение с новой машиной, которая, в свою очередь, выполнит вашу команду SCP. Например, выполнение следующего создаст новый SSH-прокси с удаленной машиной и передаст файл “backup.tar.gz”, используя его:

scp -o "ProxyCommand ssh [email protected] nc %h %p" ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 17 Ssh Proxy Bypass

Изменение стандартного порта в SCP

Помимо создания базового SSH-прокси, вы также можете изменить стандартный порт для SCP. Это особенно полезно, если вы защищаете свой сервер Linux и не хотите раскрывать любые стандартные порты.

Чтобы использовать SCP с другим портом, вам нужно использовать флаг -P, за которым следует номер порта, который вы хотите использовать. Например, следующая команда рекурсивно скопирует мою директорию “backup” и подключится к моему удаленному серверу, используя порт 2222:

scp -r -P 2222 ./backup [email protected]:/home/ramces/

Scp Transfer Linux 18 Using Custom Port

Использование тихого режима SCP

Наконец, вы также можете полностью убрать любой вывод терминала из команды SCP. Это особенно полезно, если вы хотите создать неинтерактивный скрипт, который будет выполняться на вашем компьютере. Более того, вы также можете полностью автоматизировать этот процесс, создав cronjob и передав приватный SSH-ключ на ваш сервер.

Чтобы создать тихую передачу SCP, вы должны использовать флаг -q. Например, следующая команда будет бесшумно передавать мой файл “backup.tar.gz” на мой удаленный сервер:

scp -q ./backup.tar.gz [email protected]:/home/ramces/

Scp Transfer Linux 19 Quiet Mode

Часто задаваемые вопросы

Моя передача от удаленного к удаленному в SCP не работает. Как я могу это исправить?

Эта проблема, скорее всего, связана с заблокированным портом в одном из конфигурационных файлов ваших удаленных машин. Чтобы решить эту проблему, убедитесь, что стандартный порт для SSH открыт на обеих ваших машинах.

Эта проблема также может возникнуть, если одна из ваших удаленных машин находится за соединением CG-NAT, поэтому любое внешнее соединение с вашей удаленной машиной не будет правильно разрешено. Чтобы исправить это, вам нужно использовать программу виртуальной локальной сети, такую как Yggdrasil, которая позволит вам пробить CG-NAT.

Я запустил прокси SCP, и удаленный хост закрыл соединение. Что я могу сделать?

Эта проблема, скорее всего, связана с проблемой на вашей прокси-машине. Чтобы правильно запустить SSH-прокси, убедитесь, что машина, которую вы хотите использовать, имеет сервер OpenSSH и netcat. Чтобы установить эти программы в Ubuntu, выполните следующую команду: sudo apt install ssh netcat.

Можно ли узнать все доступные шифры для SCP?

По умолчанию программа SCP в значительной степени полагается на протокол SSH для своих криптографических функций. Из-за этого вы можете использовать программу SSH, чтобы вывести список шифров, которые вы можете использовать вместе с SCP. Например, вы можете выполнить ssh -Q ciphers, чтобы вывести краткий список всех доступных шифров в вашей машине.

Изображение предоставлено: Unsplash. Все изменения и скриншоты сделаны Рамсисом Редом.