Последний gpg в скрипте с --passphrase-fd запросом пароля в контейнере Docker

Я использую gpg в Docker Debian:latest автоматическая сборка и gpg в терминале работает, но когда я использую в скрипте, не важно что делаю, он просит пароль, мне нравится:

passphrase=$(cat /build/secure/passphrase.txt)
echo $passphrase | gpg --passphrase-fd 0 --import /build/secure/gpg/secret-signing-key.pgp

но если я делаю в терминале, он работает!

Почему? Почему?

5
задан Jens Erat
источник

1 ответов

GnuPG 2,gpg-agent и шлейф Pinentry

GnuPG 2.0 и новее рассмотрим только --passphrase-...-варианты, когда --batch также применяется. От man gpg:

обратите внимание, что эта фраза используется, только если параметр --batch также с учетом. Это отличается от GnuPG версии 1.x.

таким образом, рабочая команда для GnuPG 2.0 будет:

gpg --batch --passphrase-fd 0 --import <path>

кроме того, начиная с GnuPG 2.1,gpg-agent обрабатывает все секретный ключ операции, а также запрашивает парольную фразу. Идея этого состоит в том, чтобы иметь небольшое базовое приложение, обрабатывающее самые критические биты криптографии, и имеющее (сравнительно) большой GnuPG с потенциально большим количеством ошибок и проблем безопасности, выполняющих все остальные вещи. По умолчанию gpg-agent не будет запроса gpg пароль, но попробовать спросить непосредственно (который будет явно не в автоматической сборки). Есть последний побег, хотя: вы можете использовать --pinentry-mode loopback в сделай gpg-agent запрос gpg для парольной фразы, но поскольку это влияет на безопасность, как обсуждалось ранее, необходимо также настроить gpg-agent разрешить замыкание на себя pinentry.

добавить следующую строку ~/.gnupg/gpg-agent.conf:

allow-loopback-pinentry

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

gpg --batch --pinentry-mode loopback --passphrase-fd 0 --import <path>

, проходящей в gpg-agent гнездо

лучшим вариантом, чем импорт закрытых ключей в контейнеры Docker, обычно является закрытый ключ на хосте, а затем передача gpg-agent гнездо в контейнер Docker. Таким образом, критические секреты никогда не попадут в контейнер Docker, и вы можете быть уверены, что они не будут сохранены в слоях изображений и опубликованы случайно.

2
отвечен Jens Erat 2017-09-17 09:39:34
источник

Другие вопросы debian docker encryption gnupg linux