如何配置gpg-agent在maven-gpg-plugin使用时弹出密码输入请求
搞定Maven GPG签名:让gpg-agent主动要密码,再也不用存密码啦!
嘿,我刚好折腾过这个需求,之前也反感把加密密码存在settings-security.xml里,现在给你一套完整的配置方案,完全不用存密码,构建时gpg-agent会主动弹框要密码,太舒服了!
首先得确认你已经升级到GPG 2.x版本——gpg-agent是2.x自带的玩意儿,1.x没这功能,所以先把GPG更到2.x再说哈。
1. 先把gpg-agent配置好
打开(或者新建)你的GPG agent配置文件~/.gnupg/gpg-agent.conf,加下面这些内容:
enable-ssh-support pinentry-program /usr/bin/pinentry-gtk-2 # 选你系统能用的pinentry,比如图形界面用gtk,终端用curses default-cache-ttl 3600 # 密码缓存1小时,不想频繁输就调长点 max-cache-ttl 86400 # 最长缓存1天,按需改
保存完重启gpg-agent生效:
gpgconf --kill gpg-agent gpg-agent --daemon
2. 配置Maven的Profile和gpg插件
你已经有激活的Profile了,直接在里面加maven-gpg-plugin的配置就行,核心是让它用gpg-agent,别碰密码存储:
<profile> <id>gpg-sign</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>3.1.0</version> <!-- 用最新稳定版,别用太老的 --> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> <configuration> <gpgExecutable>gpg2</gpgExecutable> <!-- 指定用GPG 2.x的程序 --> <useAgent>true</useAgent> <!-- 关键!打开gpg-agent支持 --> <!-- 这里绝对不要加passphrase相关的配置,让agent自己处理密码请求 --> </configuration> </plugin> </plugins> </build> </profile>
3. 测试一下配置
跑个Maven构建命令试试:
mvn clean verify
这时候gpg-agent会弹出你配置的pinentry窗口(终端环境就是交互式输入),输入你的GPG密钥密码,就能完成签名啦!而且密码会缓存你设置的时长,短时间内再构建不用重复输。
几个小提醒
- 先确认你的GPG密钥已经在本地,用
gpg --list-secret-keys能看到就行。 - 如果是服务器上用(没图形界面),把pinentry-program改成
/usr/bin/pinentry-curses,终端里就能输密码。 - 千万别在Maven配置里加
passphrase或者passphraseServerId,不然会覆盖agent的行为,又回到存密码的老路了。
内容的提问来源于stack exchange,提问作者Niels Basjes
相关产品推荐
相关产品推荐

