Вопрос или проблема
Я хочу скачать список файлов с 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
на лету.
Пошаговые инструкции:
-
Используйте SSH для выполнения команды
tar
: Командаssh
позволяет удаленно выполнять команды на сервере и получать данные через стандартный вывод. Это позволяет сразу передать архивированные данные в поток на локальной машине. -
Создание архивного файла с
tar
: Вы создаете сжатый архив сtar
, который сохраняет структуру имен файлов. Это необходимо, чтобы в дальнейшем вы могли восстановить файлы с исходными именами. -
Зашифруйте архив с помощью
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, обеспечивая безопасность и целостность ваших данных.