Использование gpg для подписи RPM в рамках непрерывной сборки — как избежать запроса парольной фразы?

У меня есть система сборки с непрерывной интеграцией, которая генерирует RPM через сценарий оболочки, запускаемый cron. Я хочу подписать RPM с помощью gpg, но gpg настаивает на том, чтобы пользователь вручную ввел фразу-пароль на консоли, что явно не подходит, поскольку для cron нет пользовательской консоли.

Я читал о gpg-agent, который позволит вам ввести фразу-пароль один раз для текущего сеанса входа в систему, но опять же cron не имеет сеанса входа. Я хотел бы иметь возможность настроить gpg-agent так, чтобы он принимал фразу-пароль один раз во время загрузки и при необходимости передавал ее сеансу cron. Я понятия не имею, возможно это или нет, и документы для gpg-agent довольно минимальны.

В качестве альтернативы можно было бы использовать expect для ввода фразы-пароля, когда gpg запрашивает ее, но очевидно, что это большая дыра в безопасности, поскольку фраза-пароль должна быть включена в скрипт сборки.


person Dave Kirby    schedule 11.10.2010    source источник


Ответы (2)


Вы должны запустить gpg-agent при запуске и сохранить переменную окружения GPG_AGENT_INFO. Затем вы можете настроить его в среде вашего сценария, и он должен работать должным образом. Кроме того, убедитесь, что разрешения сокета в GPG_AGENT_INFO позволяют вашему сценарию читать его.

person smola    schedule 11.10.2010
comment
Спасибо, это именно то, что я ищу. Но как вы запрашиваете или устанавливаете разрешения для сокета? - person Dave Kirby; 12.10.2010
comment
Вы устанавливаете разрешение как обычно (выбрано на пути в GPG_AGENT_INFO). Затем, если переменная среды установлена, gpg должна использовать ее без каких-либо дополнительных действий с вашей стороны. Обратите внимание, что я не пробовал этот случай, так что давайте посмотрим, работает ли он;) - person smola; 12.10.2010

Какой бы инструмент сборки вы ни использовали для создания RPM, он может подписать его. Например, у Gradle есть плагин, который подписывает за вас. Вы должны создать файл свойств с идентификатором, парольной фразой и расположением файла набора ключей, а все остальное он сделает сам.

См.: https://docs.gradle.org/current/userguide/signing_plugin.html

person C Dorman    schedule 29.01.2016
comment
Хотя теоретически это может ответить на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки . - person Bhargav Rao; 29.01.2016