Скачайте файл с помощью SSH/SCP, архивируйте его с помощью tar и передайте в openssl.

Вопрос или проблема

Я хочу скачать список файлов с SSH-сервера, затем поместить его в какой-то контейнер (например, tar-файл) и, наконец, зашифровать его (например, с помощью openssl).

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

Итак, я пробую что-то вроде этого:

scp $USER@$SERVER:$FILEPATH /dev/stdout \
| tar cv - - \
| openssl enc -aes-256-cbc -salt -pass pass:test -out othername.enc

Это не работает; scp, похоже, не передает файл в tar как ожидалось, и поэтому tar-архив не содержит загруженного файла.

Есть ли способ сделать это?

Команда scp копирует файлы, она не учитывает stdin или stdout. Вместо этого выполните tar на удаленном хосте, и зашифруйте полученный поток:

ssh -n "$user@$server" tar cvf - "$filepath" |
    openssl enc -aes-256-cbc -salt -pbkdf2 -pass pass:test -out othername.enc

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

filepath="/usr/local"
ssh … tar cvf - "$filepath"           # Нет!

используйте это:

filepath="usr/local"
ssh … tar cvfC - / "$filepath"        # Лучше

Или, возможно,

filepath="/usr/local"
ssh … tar cvfC - / "${filepath:1}"    # Удалить ведущий "/"

Также, как правило, считается лучше сжимать поток данных перед его шифрованием. В этом случае (предполагается использование gzip) вы можете добавить флаг z к tar следующим образом:

ssh -n "$user@$server" tar czvf - "$filepath" |
    openssl enc -aes-256-cbc -salt -pbkdf2 -pass pass:test -out othername.enc

Ответ или решение

Загрузить файл с помощью SSH/SCP, запаковать его с помощью tar и зашифровать через openssl

Если вы хотите загрузить файл или список файлов с удаленного SSH-сервера, создать архив и затем зашифровать его, вам нужно следовать определенной последовательности действий. Ваш первоначальный подход с использованием команды scp не работает в данном случае, так как scp не поддерживает передачу данных через стандартный вывод (stdout). Вместо этого, можно использовать команду ssh, чтобы выполнить команды tar и openssl на лету.

Пошаговые инструкции:

  1. Используйте SSH для выполнения команды tar: Команда ssh позволяет удаленно выполнять команды на сервере и получать данные через стандартный вывод. Это позволяет сразу передать архивированные данные в поток на локальной машине.

  2. Создание архивного файла с tar: Вы создаете сжатый архив с tar, который сохраняет структуру имен файлов. Это необходимо, чтобы в дальнейшем вы могли восстановить файлы с исходными именами.

  3. Зашифруйте архив с помощью openssl: Команда openssl позволяет зашифровать данные, используя симметричные алгоритмы шифрования, такие как AES.

Пример команды:

ssh -n "$user@$server" tar czvf - "$filepath" | \
    openssl enc -aes-256-cbc -salt -pbkdf2 -pass pass:test -out othername.enc
  • Параметры и пояснения:
    • -n: Отключает подключение стандартного ввода к ssh, предотвращая возможные задержки или зависимости от терминала.
    • tar czvf -: Архивирует (c – создать) и сжимает (z – gzip) файлы, выводя результат в стандартный вывод (f -).
    • openssl enc: Использует алгоритм AES-256-CBC для шифрования данных.
    • -salt: Использует опцию соли для усложнения шифрования, добавляя дополнительный слой безопасности.
    • -pbkdf2: Применяет функцию ключевого расширения PBKDF2 для повышения устойчивости пароля.
    • -pass pass:test: Указывает пароль для шифрования прямо в команде. Для обеспечения большей безопасности можно использовать файл для пароля или переменные окружения.
    • -out othername.enc: Задает имя выходного файла для зашифрованных данных.

Советы по безопасности:

  • Избегайте использования абсолютных путей в tar: С точки зрения безопасности и лучшей практики, старайтесь избегать использования абсолютных путей внутри архивов. Вы можете использовать флаг -C, чтобы указать начальную директорию и сделать пути относительными.

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

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

Оцените материал
Добавить комментарий

Капча загружается...