我正在使用 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 播种使用密码;您可以将其构建到启动脚本中,并在构建机器启动时需要手动干预一次。这样的设置稍微安全一些,因为密码只驻留在内存中。但是,能够读取内存内容的攻击者仍然可以窃取您的密码,然后以你的名义分发恶意软件
先阻止现有代理
gpgconf --kill gpg-agent
然后启动一个新实例并允许注入密码;此外,我们可以在这里增加生存时间
gpg-agent --default-cache-ttl 3600 --max-cache-ttl 86400 --allow-preset-passphrase --daemon
注入你的密码签名子密钥— 此命令运行时,系统将提示您输入密码。
/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 中设置的任何密码都会消失。