Linux

Как настроить безопасный обмен файлами в Linux: подробное руководство

В этом гайде вы освоите безопасные методы обмена файлами в Linux: настройку SSH-ключа, использование SCP/SFTP и шифрование данных. Практические примеры для Ubuntu, CentOS и других дистрибутивов.

Обновлено 16 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 10+CentOS 8+Fedora 35+Arch Linux

Введение

Безопасный обмен файлами — обязательное требование при работе с конфиденциальными данными, серверной инфраструктурой или в соответствии с политиками информационной безопасности. Linux предоставляет мощные встроенные инструменты, использующие криптографию SSH для защиты передаваемой информации от перехвата и подделки. В этом руководстве вы освоите три основных метода: SCP (простое копирование), SFTP (интерактивный протокол) и предварительное шифрование файлов. Все методы работают на стандартных дистрибутивах без установки дополнительного ПО.

Требования к системе

Перед началом убедитесь, что:

  1. На удалённом сервере установлен и запущен SSH-сервер (sshd). Проверьте:
    sudo systemctl status ssh   # Ubuntu/Debian
    sudo systemctl status sshd  # CentOS/RHEL/Fedora
    
  2. На локальной машине есть SSH-клиент (обычно предустановлен).
  3. У вас есть учётные данные (логин и пароль или доступ по ключу) на удалённом сервере.
  4. Порт 22 (или кастомный SSH-порт) открыт в фаерволе сервера.
  5. Для шифрования GPG установите gnupg:
    sudo apt install gnupg   # Debian/Ubuntu
    sudo dnf install gnupg   # Fedora/CentOS
    

Шаг 1: Установка и настройка SSH-сервера

Если на целевом сервере ещё не работает SSH, выполните установку:

Для Debian/Ubuntu:

sudo apt update
sudo apt install openssh-server
sudo systemctl enable --now ssh
sudo ufw allow 22/tcp   # Если используете UFW

Для RHEL/CentOS/Fedora:

sudo dnf install openssh-server
sudo systemctl enable --now sshd
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload

Проверка: Подключитесь с локальной машины:

ssh пользователь@адрес_сервера

Если подключение успешно — сервер готов.

Шаг 2: Настройка аутентификации по ключам SSH

Аутентификация по паролю уязвима для брутфорса. Ключи обеспечивают безопасный автоматический вход.

2.1 Генерация ключевой пары

На локальной машине выполните:

ssh-keygen -t ed25519 -C "ваш_email@example.com"

Или для совместимости со старыми системами:

ssh-keygen -t rsa -b 4096 -C "ваш_email@example.com"

Нажмите Enter для сохранения ключа в ~/.ssh/id_ed25519 (или id_rsa). Рекомендуется задать парольную фразу (passphrase) для дополнительной защиты ключа.

2.2 Копирование публичного ключа на сервер

Самый простой способ:

ssh-copy-id пользователь@адрес_сервера

Если команды нет, скопируйте вручную:

cat ~/.ssh/id_ed25519.pub | ssh пользователь@адрес_сервера "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

2.3 Проверка и защита прав доступа

На сервере выполните:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Теперь вход должен работать без пароля (только по ключу). Проверьте:

ssh пользователь@адрес_сервера

Шаг 3: Передача файлов через SCP (Secure Copy)

SCP идеален для разовых операций копирования. Синтаксис аналогичен cp, но с указанием удалённого хоста.

3.1 Копирование с локальной машины на сервер

scp /локальный/путь/файл.txt пользователь@адрес_сервера:/удалённый/путь/

Пример с сжатием (флаг -C ускоряет передачу текстовых файлов):

scp -C archive.tar.gz user@192.168.1.10:/backup/

3.2 Копирование с сервера на локальную машину

scp пользователь@адрес_сервера:/удалённый/файл.log /локальный/путь/

3.3 Рекурсивное копирование директорий

scp -r /локальная/папка пользователь@адрес_сервера:/удалённая/папка

3.4 Копирование через нестандартный порт SSH

scp -P 2222 файл.txt user@server:/path/

⚠️ Важно: Флаг -P (заглавная P) задаёт порт для SCP. В SSH-клиенте используется -p (строчная).

Шаг 4: Управление файлами через SFTP

SFTP даёт больше контроля: просмотр, удаление, переименование файлов в интерактивном режиме.

4.1 Подключение

sftp пользователь@адрес_сервера

Или с указанием порта:

sftp -P 2222 пользователь@адрес_сервера

4.2 Основные команды SFTP

Команда (на сервере)Команда (локально)Описание
lsllsСписок файлов (удалённо/локально)
cd /путьlcd /путьСмена директории
put локальный_файл [удалённый_путь]Загрузка файла на сервер
get удалённый_файл [локальный_путь]Скачивание файла
rm файлУдаление на сервере
rename старое новоеПереименование
mkdir папкаСоздание директории
pwdlpwdПоказать текущую директорию
bye / exitЗавершить сессию

Пример сессии:

sftp user@example.com
sftp> lcd ~/Downloads
sftp> put report.pdf /var/www/backups/
sftp> get /etc/config.yaml ~/config_backup/
sftp> bye

Шаг 5: Дополнительное шифрование файлов (GPG/OpenSSL)

Если файлы содержат сверхконфиденциальные данные (ключи, персональные данные), шифруйте их до передачи, даже если используется SSH.

5.1 Шифрование с помощью GPG (рекомендуется)

Шифрование для конкретного получателя (требуется его открытый ключ):

gpg --encrypt --recipient получатель@email.com файл.txt

Результат: файл.txt.gpg. Получатель расшифрует своим закрытым ключом:

gpg --decrypt файл.txt.gpg > файл.txt

Шифрование паролем (симметричное):

gpg -c файл.txt

Вам предложат ввести пароль. Расшифровка:

gpg -d файл.txt.gpg > файл.txt

5.2 Шифрование через OpenSSL (альтернатива)

Симметричное шифрование AES-256:

openssl enc -aes-256-cbc -salt -in файл.txt -out файл.txt.enc

Введите пароль. Расшифровка:

openssl enc -d -aes-256-cbc -in файл.txt.enc -out файл.txt

💡 Совет: Для автоматизации используйте переменные окружения или скрипты с запросом пароля через read -s. Никогда не храните пароли в открытом виде в скриптах!

Проверка результата

После передачи убедитесь, что файлы не повреждены и зашифрованы (если использовали дополнительное шифрование).

  1. Проверка целостности через хеши: На локальной машине:
    sha256sum файл.txt
    

    На сервере (после передачи):
    sha256sum файл.txt
    

    Сравните вывод. Хеши должны совпадать.
  2. Проверка шифрования: Попробуйте открыть переданный файл (например, .gpg или .enc). Система должна запросить пароль или ключ. Если файл открывается без пароля — шифрование не применено.
  3. Проверка прав доступа: Убедитесь, что на сервере у файла правильные владелец и права:
    ls -l /удалённый/путь/файл.txt
    

Возможные проблемы и решения

Проблема 1: Permission denied (publickey,password)

Причина: Сервер не принимает ваш ключ или требует пароль. Решение:

  • Проверьте, что публичный ключ добавлен в ~/.ssh/authorized_keys на сервере.
  • Убедитесь в правильности прав: chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys.
  • Проверьте, что в /etc/ssh/sshd_config разрешена аутентификация по ключу: PubkeyAuthentication yes.
  • Перезапустите SSH: sudo systemctl restart ssh.

Проблема 2: Connection refused или Timeout

Причина: SSH-сервер не запущен, порт закрыт фаерволом или сервер недоступен. Решение:

  • Проверьте запуск службы (см. Шаг 1).
  • Проверьте фаервол: sudo ufw status (Ubuntu) или sudo firewall-cmd --list-all.
  • Убедитесь, что сервер отвечает на пинги: ping адрес_сервера.
  • Если используете нестандартный порт, укажите его через -P (SCP) или -p (SFTP).

Проблема 3: Передача прерывается на больших файлах

Причина: Нестабильное соединение, таймауты SSH. Решение:

  • Включите сжатие в SCP/SFTP: добавьте флаг -C.
  • Увеличьте таймауты в ~/.ssh/config на клиенте:
    Host *
        ServerAliveInterval 60
        ServerAliveCountMax 3
    
  • Разбейте файл на части: split -b 1G большой_файл.iso часть_.
  • Используйте rsync с опцией --partial для возобновления.

Проблема 4: Низкая скорость передачи

Причина: Ограничения сети, высокая нагрузка на диск, отсутствие сжатия. Решение:

  • Используйте сжатие (-C в SCP, в SFTP настройте -C).
  • Проверьте загрузку сети: iftop или nethogs.
  • Для локальной сети убедитесь в скорости интерфейсов: ethtool eth0.
  • Если передаёте множество мелких файлов, упакуйте их в архив: tar czf archive.tar.gz папка/.

Проблема 5: Ошибки шифрования GPG/OpenSSL

Причина: Отсутствует ключ получателя, неверный пароль, повреждённый файл. Решение:

  • Для GPG: проверьте наличие открытого ключа получателя: gpg --list-keys.
  • Если ключа нет, запросите у получателя или импортируйте из ключевого сервера: gpg --keyserver hkps://keys.openpgp.org --search-keys email.
  • Для OpenSSL: убедитесь, что используете тот же алгоритм (-aes-256-cbc) и пароль.
  • Проверьте целостность зашифрованного файла: file файл.txt.gpg должен показать "GPG encrypted data".

Проблема 6: SFTP не позволяет удалять/переименовывать файлы

Причина: Недостаточно прав на сервере. Решение:

  • Убедитесь, что пользователь имеет права на запись в директорию: ls -ld /путь/.
  • Измените владельца/права: sudo chown пользователь:группа файл и chmod 644 файл.
  • Если используется chroot в SSH, проверьте настройки в sshd_config.

Этот набор решений покрывает 90% типичных ситуаций. В остальных случаях смотрите логи SSH на сервере:

sudo tail -f /var/log/auth.log   # Debian/Ubuntu
sudo tail -f /var/log/secure     # CentOS/RHEL

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

Чем SCP отличается от SFTP для безопасной передачи?
Можно ли передавать файлы между Linux и Windows безопасно?
Как обеспечить максимальную безопасность при передаче конфиденциальных данных?
Что делать, если при scp выдает 'Permission denied'?

Полезное

Установка и запуск SSH-сервера
Настройка аутентификации по ключам SSH
Безопасная передача файлов через SCP
Управление файлами через SFTP-сессию
Дополнительное шифрование файлов GPG/OpenSSL