У меня есть скрипт, который создает ночные резервные копии нескольких каталогов.
Он создается с использованием tar -czf
, а путь к файлу tar.gz назначения находится в смонтированном сетевом каталоге. Полученный файл имеет размер около 1,2 ГБ.
Скорость сети достаточно высокая (копирование с сетевого диска на локальный происходит со скоростью ~ 28 МБ / с).
Теперь я хочу использовать шифрование с открытым ключом для шифрования файла tar.gz перед его передачей на сетевой диск и хотел бы знать, каков наилучший способ сделать это.
Должен ли я сначала создать файл локально, зашифровать его, а затем скопировать? Или есть способ «передать» поток tar через процесс шифрования и записать результаты непосредственно на сетевой диск?
источник
tar xz
во втором наборе команд бытьtar -xz
вместо?-
z
опция добавляет многоСледующий процесс сначала шифрует файл на локальном диске, а затем может быть отправлен по сети (или, при необходимости, сохранен)
Сначала создайте открытый и закрытый ключи (выполняется только один раз):
Затем при каждом резервном копировании:
Создать длинную случайную фразу-пароль, сохранить в файл
echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
зашифровать файл с парольной фазой
openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
зашифровать пароль с открытым ключом
openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt
Затем сохраните encrypted.dat И enc.key.txt, где это необходимо.
Для расшифровки:
Расшифровать зашифрованную фразу-пароль с закрытым ключом
openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
Расшифровать файл
openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > UNENCRYPTED_FILE
Это намного дольше, чем у Флориана, но я решил использовать его, чтобы лучше понять процесс и не зависеть от зависящих от сервера переменных конфигурации GPG и т. Д. Я также не смог найти никакой полезной документации GPG.
источник
openssl rand 32 -out key.txt
Я делаю это с помощью асимметричного ключа шифрования. Это означает, что у меня есть открытый ключ (которым я могу поделиться с любым, кому я хотел бы отправить мне зашифрованные пакеты), который позволяет мне шифровать пакет. У меня также есть закрытый ключ (который я не разделяю), который позволяет мне расшифровывать пакет.
Мои команды для шифрования текущего рабочего каталога: -e для шифрования, -r для указания «получателя» или ключа для использования, -o для указания выходного файла.
И расшифровать в текущий рабочий каталог:
Или расшифровать в стандартный файл tgz для последующей распаковки:
Конечно, это работает, только если я уже сгенерировал пару открытый-закрытый ключ и установил ее с помощью gpg. В моем случае я сделал это, используя руководство Digital Ocean по адресу https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu. -12-04-vps . ABCD1234 в команде шифрования относится к одному из открытых ключей, установленных в моей системе. В этом руководстве также рассказывается, как поделиться своим открытым ключом и установить другие открытые ключи для отправки и получения зашифрованных файлов.
источник
GnuPG - это то, что я выбрал для этого процесса, и потому что вы указали, что шаги дешифрования, где непрозрачность (я согласен в этом примере использования), я также работал над этой стороной проблемы. Проверьте журналы сборки проектов Travis-CI, чтобы узнать, какие функции в настоящее время работают, как задумано, и файл travis.yml для отслеживания наряду с выводом журналов. В основном вам понадобятся три сценария из этого проекта; сценарий keygen, сценарий дешифрования и сценарий прослушивания именованных каналов. Сценарий keygen и вспомогательный сценарий дешифрования должны использоваться на устройстве, которое будет выполнять дешифрование, а сценарий прослушивания именованного канала должен быть на устройстве, выполняющем шифрование.
Сценарий прослушивания именованного канала принимает строки, пути к файлам или каталогам после установки и выводит зашифрованные результаты предсказуемым образом.
Ниже приведены примеры команд, которые могут быть помещены в ваш скрипт ночного резервного копирования для шифрования и для сжатия каталогов + шифрование.
Для расшифровки вы захотите проверить, как сценарии сборки
.travis-ci/script_decrypt.sh
и.travis-ci/test_search_script_decrypt.sh
как восстанавливаются добавленные строки зашифрованных данных и как восстанавливаются массовые файлы / каталоги.Конечно, в эксперименте лучше не использовать пары первичных ключей (почему был написан скрипт keygen), и его не следует использовать с важными данными, пока вы не уверены, как восстановить их в читаемую форму.
источник