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

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

Настройка SSH

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

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

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

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

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

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

ip addr

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

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

ssh user@remote.machine.ip.address

Смените «user» на реальное имя пользователя на сервере.

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

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

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

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

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

scp backup.tar.gz ramces@192.168.68.165:/backups/

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

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

scp *.tar.gz ramces@192.168.68.165:/backups/

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

scp ramces@192.168.68.165:/backups/backup.tar.gz ./

Заметили точку в конце команды? Она означает «текущий каталог», как и в стандартных командах cp или mv. Вы можете с таким же успехом указать и другой каталог, если захотите.

scp -r ramces@192.168.68.165:/backups/ backups-from-server/

И то же самое с масками:

scp ramces@192.168.68.165:/backups/*.txz ./

Для рекурсивного копирования каталога на удаленный сервер используйте опцию -r:

scp -r backups/ ramces@192.168.68.165:/backups/

Для рекурсивного копирования каталога с удаленного сервера на локальную машину используйте:

scp -r ramces@192.168.68.165:/backups/ ./

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

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

scp -C backup.tar.gz ramces@192.168.68.165:/home/ramces/
.

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

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

scp -Cr ramces@192.168.68.165:/home/ramces/backups /home/ramces/

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

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

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

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

scp -c aes256-ctr ./backup.tar.gz ramces@192.168.68.165:/home/ramces/

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

scp -c aes192-ctr,aes256-ctr ./backup.tar.gz ramces@192.168.68.165:/home/ramces/

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

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

Чтобы ограничить эффективную пропускную способность программы, вам нужно использовать флаг -l, за которым следует верхний предел, который вы хотите установить в килобитах в секунду (Кб/с). Например, выполнение следующей команды передаст файл «backup.tar.gz» на мой удаленный сервер с эффективной пропускной способностью 1600 Кб/с:

scp -l 1600 ./backup.tar.gz ramces@192.168.68.165:/home/ramces/

Передача с удаленного на удаленный сервер с помощью SCP

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

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

scp ramces@192.168.68.108:/home/ramces/remote-backup.tar.gz ramces@192.168.68.165:/home/ramces/

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

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

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

scp -o "ProxyCommand ssh ramces@192.168.68.108 nc %h %p" ./backup.tar.gz ramces@192.168.68.165:/home/ramces/

Изменение порта по умолчанию в SCP

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

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

scp -r -P 2222 ./backup ramces@192.168.68.165:/home/ramces/

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

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

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

scp -q ./backup.tar.gz ramces@192.168.68.165:/home/ramces/

Передача файлов по ключу без пароля

scp -i /Users/ramces/.ssh/id_rsa -P 2203 f.zip ramces@192.168.68.165:/home/ramces/

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

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

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

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

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

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

sudo apt install ssh netcat

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

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

Зарубин Иван Эксперт по Linux и Windows

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

Вдохновлен www.maketecheasier.com

Похожие статьи

Комментарии (0)