如何在 GPG 签名 dpkg-buildpackage 时自动化密码短语?

如何在 GPG 签名 dpkg-buildpackage 时自动化密码短语?

我正在使用 dpkg-buildpackage,我想完全自动化我的脚本,但我找不到如何对包进行 GPG 签名以及如何在我的持续集成系统中自动输入密码短语。我不想使用“-us -uc”参数,因为我确实想对它们进行签名。

有任何想法吗?

答案1

如果您的密钥环已解锁,您需要做的就是:

设置 gpg-agent

因此您不需要多次输入密码...

sudo aptitude install gnupg-agent pinentry-gtk2 pinentry-curses
用你的 GPG 密钥 ID 替换 0xD34DB33F
export GPGKEY=0xD34DB33F
killall -q gpg-agent
eval $(gpg-agent --daemon)

export DEBEMAIL="[email protected]"
export DEBFULLNAME="Your full name as it appears on the GPG key"

这里

我可以证明第二部分。第一部分是复制粘贴的,但看起来是合法的。我认为你仍然需要解锁一次密钥,但它会保持解锁状态。

答案2

注释掉:

use-agent

~/.gnupg/gpg.conf。并且

dpkg-buildpackage -p'gpg --no-tty --passphrase <passphrase>'

或者

dpkg-buildpackage -p'gpg --no-tty --passphrase-file <passphrase file>'

编辑:

警告严重的安全风险!
任何能够访问此类脚本的人都可以以你的名义分发恶意软件

答案3

gpg-agent 方法无法避免要求使用键盘输入密码。我见过 Freight 使用

gpg --batch --passphrase-fd ...

答案4

将密码输入到 gpg-agent 中

除了这里已经提到的其他方法之外,还可以为你的 gpg-agent 播种使用密码;您可以将其构建到启动脚本中,并在构建机器启动时需要手动干预一次。这样的设置稍微安全一些,因为密码只驻留在内存中。但是,能够读取内存内容的攻击者仍然可以窃取您的密码,然后以你的名义分发恶意软件

  1. 先阻止现有代理

    gpgconf --kill gpg-agent
    
  2. 然后启动一个新实例并允许注入密码;此外,我们可以在这里增加生存时间

    gpg-agent --default-cache-ttl 3600 --max-cache-ttl 86400 --allow-preset-passphrase --daemon
    
  3. 注入你的密码签名子密钥— 此命令运行时,系统将提示您输入密码。

    /usr/lib/gnupg/gpg-preset-passphrase --preset <keygrip>
    

为了实现此功能,你需要签名子密钥(不是主密钥!)。用于gpg查找该信息

gpg --with-keygrip --list-secret-key <YourUserID>

签名子密钥列在主密钥和电子邮件地址下方,通常标记为ssb[S][SA]


提示

  • 有时你需要export GPG_TTY=$(tty)工作pinentry

  • 你可以从 gpg-agent 启动一个子 shell

    gpg-agent [..further.options..] --daemon /bin/bash
    

    这样,当子 shell 退出时代理也会退出,并且您在子 shell 中设置的任何密码都会消失。

相关内容