Как подписать пакет Deb с dpkg-sig и GPG2 в Ubuntu 16.04?

У меня есть скрипт, который используется для подписи deb и создания репо. Соответствующий код ниже, что вызывает проблемы:

export GNUPGHOME=foo/gnupg/ killall -q gpg-agent eval $(gpg-agent --daemon --homedir $GNUPGHOME --allow-preset-passphrase) echo ${signPass} | /usr/lib/gnupg2/gpg-preset-passphrase --preset $fingerprint dpkg-sig -g '--no-tty' --sign builder bar/baz/app.deb

Это работает на Ubuntu 14.04, но как только я попытаюсь запустить его на сервере с установленным Ubuntu 16.04, я получаю следующие ошибки: [ ! d1] dpkg-deb: building package 'app' in 'bar/baz/app.deb'. Processing bar/baz/app.deb.. gpg: gpg-agent is not available in this session gpg: Sorry, no terminal at all requested - can't get input E: Signing failed. Error code: 512

Ubuntu 14.04 пакеты:

gnupg - 1.4.16-1ubuntu2.3 gnupg-agent - 2.0.22-3ubuntu1.3 gnupg2 - 2.0 .22-3ubuntu1.3 gpgv - 1.4.16-1ubuntu2.3

Ubuntu 14.04 пакеты:

gnupg - 1.4.16-1ubuntu2 .3 gnupg-agent 2.1.11-6ubuntu2 gnupg-agent - 2.0.22-3ubuntu1.3 gpgv - 1.4.20-1ubuntu3.1 gnupg2 - 2.0.22- 3ubuntu1.3

Я знаю, что dpkg-sig вызывает /usr/bin/gpg напрямую, и я использовал update-alternatives, чтобы установить /usr/bin/gpg как gpg2, но это дает мне ошибки с " inappropiate ioctl для устройства ".

Дополнительная информация:

Этот скрипт запускается как часть задания сборки на «Bamboo». Пароль передается как переменная среды, так как он надежно хранится. Я не хочу менять конвейер этого приложения.

1
задан 25 September 2017 в 23:43

2 ответа

Вы говорите, что фраза pass в ${signPass} поступает из некоторого безопасного хранилища. Если вы надежно сохраняете пароль, вы также можете надежно сохранить цепочку ключей с секретным ключом без пароля.

Измените пароль пустого. Вы можете использовать свой любимый менеджер цепочки ключей или следующую команду: GNUPGHOME=... gpg2 --passwd user_id Хранить цепочку ключей в защищенном хранилище. Запустите dpkg-sig с параметрами GPG, которые используют безопасно сохраненную цепочку ключей: dpkg-sig --gpg-options "--secret-keyring /path/to/secret-keyring.gpg"

В качестве альтернативы вы можете использовать секретный ключ паролей без пароля с dpkg-sig (см. править ниже):

dpkg-sig -f /path/to/pass-phrase ...

Вы даже можете использовать стандартный ввод:

printf '%s' "${signPass}" | dpkg-sig -f - ...

см. править ниже Похоже, что длинная ошибка прерывает опцию -f, но вы можете обойти ее через --gpg-options '--passphrase-file /path/to/pass-phrase' (за исключением того, что вы не можете использовать имена файлов фреймов с пробелами).

1
ответ дан 18 July 2018 в 06:14

Вы говорите, что фраза pass в ${signPass} поступает из некоторого безопасного хранилища. Если вы надежно сохраняете пароль, вы также можете надежно сохранить цепочку ключей с секретным ключом без пароля.

Измените пароль пустого. Вы можете использовать свой любимый менеджер цепочки ключей или следующую команду: GNUPGHOME=... gpg2 --passwd user_id Хранить цепочку ключей в защищенном хранилище. Запустите dpkg-sig с параметрами GPG, которые используют безопасно сохраненную цепочку ключей: dpkg-sig --gpg-options "--secret-keyring /path/to/secret-keyring.gpg"

В качестве альтернативы вы можете использовать секретный ключ паролей без пароля с dpkg-sig (см. править ниже):

dpkg-sig -f /path/to/pass-phrase ...

Вы даже можете использовать стандартный ввод:

printf '%s' "${signPass}" | dpkg-sig -f - ...

см. править ниже Похоже, что длинная ошибка прерывает опцию -f, но вы можете обойти ее через --gpg-options '--passphrase-file /path/to/pass-phrase' (за исключением того, что вы не можете использовать имена файлов фреймов с пробелами).

1
ответ дан 24 July 2018 в 18:33
  • 1
    dpkg-sign терпит неудачу, когда я пытаюсь передать -f / путь / в / passfile: – ivan.ukr 28 March 2018 в 16:34
  • 2
    Я пытаюсь их на Ubuntu 16.04 LTS, вся последняя версия пакета (после недавнего обновления sudo apt update и amp; sudo apt upgrade): dpkg-sig терпит неудачу, когда я пытаюсь передать -f / path / to / passfile: dpkg-sig --sign builder -f password.txt -k 12345678 mypackage_0.0.1-0ubuntu1_amd64.deb Обработка mypackage_0.0.1-0ubuntu1_amd64.deb ... использование: gpg [options] --clearsign [имя_файла] E: Ошибка подписи. Код ошибки: 512 – ivan.ukr 28 March 2018 в 16:44
  • 3
    dpkg-sig также не работает при попытке использовать & quot; -f- & quot; echo "мой пароль секретного ключа & quot; | dpkg-sig -f - --sign builder -k 12345678 mypackage_0.0.1-0ubuntu1_amd64.deb Обработка xiota-proxy_0.0.1-0ubuntu1_amd64.deb ... sh: 1: невозможно открыть -: Нет такого файла E: Ошибка подписи. Код ошибки: 512 Но работает хорошо, когда я запускаю только dpkg-sig --sign builder -k 12345678 mypackage_0.0.1-0ubuntu1_amd64.deb, но я должен ввести пароль вручную. – ivan.ukr 28 March 2018 в 16:44
  • 4
    любые идеи, почему это происходит? – ivan.ukr 28 March 2018 в 16:45
  • 5
    Я нашел отчет об ошибке LP для этой проблемы. Ошибка была сообщена ~ 1,5 года назад, подтверждена, но все еще не исправлена. [D0] bugs.launchpad.net/ubuntu/+source/dpkg-sig/+bug/1630542 – ivan.ukr 31 March 2018 в 01:11

Другие вопросы по тегам:

Похожие вопросы: