在MacOS上使用Maven时出现"gpg: signing failed: Inappropriate ioctl for device"错误

71

我已经通过Homebrew安装了GPG,使用brew install gpg命令。它的版本是2.2.17

在我的Maven POM中,我有以下片段:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
    </executions>
</plugin>

然而,当运行mvn clean verify时,我收到了这个错误:

gpg: Beglaubigung fehlgeschlagen: Inappropriate ioctl for device
gpg: signing failed: Inappropriate ioctl for device

我该如何修复这个错误?


尝试使用-X参数运行Maven,以查找实际执行的gpg命令行。 - JimmyB
@JimmyB很遗憾,在使用“-X”时没有任何gpg命令可打印。 - Harold L. Brown
5个回答

146

2
这个修复方法在我的Linux机器上也起作用了。当我将gpg导入ssh时,我遇到了这个错误。 - ki9
4
export GPG_TTY=$(tty) 的翻译是:将当前终端设备的路径赋值给 GPG_TTY 变量,并将该变量导出到环境变量中。 - Amerousful
3
@Amerousful,给出的两行解决方案更好,因为它不隐藏退出代码。(尝试export test=$(exit 1); echo $? - OJFord
还在WSL上运行的Ubuntu上工作过。 - dcg

43

如果您使用的是 macOS 操作系统,您可能希望使用 pinentry-mac 工具,以便可以弹出 GUI 窗口输入 PIN 并可选择将 PIN 存储在 Keychain 中。

您可以通过 Homebrew 安装它:

brew install pinentry-mac

在您的~/.gnupg/gpg-agent.conf配置文件中添加以下行以启用它(如果不存在,请创建):

pinentry-program /usr/local/bin/pinentry-mac

22
在您的提议被应用后,运行一次“killall gpg-agent”即可使其生效。 - meduz'
3
非常感谢!这可能是更好的方法,不确定为什么没有更多的赞。 - Luca Steeb
1
对我来说,路径是pinentry-program /opt/homebrew/bin/pinentry-mac - Mahendra Liya

3

试试这个

gpg --use-agent --armor --detach-sign --output $(mktemp) pom.xml

GPG 在我的电脑上突然停止工作了。这个方法非常有效,但我仍然不知道原因。就像代理需要被重启一样。 - Adam Gent

1
对我来说,这是因为终端窗口不够大,无法容纳密语TUI。一旦我打开了一个更大的终端选项卡,然后重新运行gpg命令,我就能看到密语终端用户界面了。

0
如果在bash中输入gpg命令时出现此错误消息,请尝试添加--no-tty。这对我有用,可以解决问题。

这个不起作用,一遍又一遍地出现这个错误。我开始认真地感觉到没有人知道该怎么做,只是随意地提供解决方案。那么该怎么办呢? - Eric Buist
@EricBuist。很多IT工作都是这样的。你在谷歌上寻找灵感,尝试各种方法直到找到有效的解决方案。 - RedDragonWebDesign
@EricBuist。很多IT工作都是这样的。你会在网上搜索想法,然后尝试各种方法,直到有些东西起作用。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接