无需键盘交互的gpg加密文件[关闭]
Posted
技术标签:
【中文标题】无需键盘交互的gpg加密文件[关闭]【英文标题】:gpg encrypt file without keyboard interaction [closed] 【发布时间】:2012-03-16 15:18:42 【问题描述】:我正在 crontab 中运行下一个命令来加密文件,但我不想要键盘交互
echo "PASSPHRASE" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT
但我有这个答案:
gpg: C042XXXX: There is no assurance this key belongs to the named user
pub 40XXX/C042XXXX 2012-01-11 Name LastName. (comment) <user@email.com>
Primary key fingerprint: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
Subkey fingerprint: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N)
【问题讨论】:
由于 --passphrase-fd 只读取第一行...如果您运行echo -e "PASSPHRASE" "\nyes" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT
会发生什么?
手册页有人吗? --batch
和 --yes
.
【参考方案1】:
正如 David 所暗示的,这里的问题是 gpg 不信任您用于加密的公钥。你可以按照他的解释在密钥上签名。
另一种选择——特别是如果密钥可能偶尔更改——将--trust-model always
添加到您的 gpg 命令。
这是手册页中的相关部分:
--trust-model pgp|classic|direct|always|auto Set what trust model GnuPG should follow. The models are: pgp This is the Web of Trust combined with trust signatures as used in PGP 5.x and later. This is the default trust model when creating a new trust database. classic This is the standard Web of Trust as used in PGP 2.x and earlier. direct Key validity is set directly by the user and not calculated via the Web of Trust. always Skip key validation and assume that used keys are always fully trusted. You generally won't use this unless you are using some external validation scheme. This option also suppresses the "[uncertain]" tag printed with signature checks when there is no evidence that the user ID is bound to the key. auto Select the trust model depending on whatever the internal trust database says. This is the default model if such a database already exists.
【讨论】:
不明白为什么系统认为那是代码。我点击了报价;不是代码。编辑时,它仅显示为引用(没有颜色)。很奇怪。 因为文字使用了空格来对齐。 这对我来说是正确的答案!谢谢【参考方案2】:这是我的解决方案,基于 gpg2(但我敢打赌,您可以将类似的技术应用于 gpg)
$ gpg2 --edit-key recipient email address
> trust
> 5 (select 5 if you ultimately trust the key)
> save
这将告诉 gpg2 完全信任密钥,以便您无需提示即可加密
【讨论】:
这会立即更新 trust-db,不需要保存。 这设置了所有者信任而不是密钥有效性。 Ultimate Trust 仅适用于您自己的密钥。即,由最终可信身份签名的所有内容都按照您自己的签名处理。所以不要 SET TRUST TO ULTIMATE 如果它不是你的钥匙。问题是密钥有效性。要解决/解决此问题,您应该签署密钥。 (考虑仅本地签名和指纹验证) x539 是对的。在gpg2 --edit-key <key-id>
之后,您执行lsign
和save
。我认为 trust 5 对此的使用是错误的(被误解),而且(对我来说)它甚至无效(没用),因为 x539 告诉我们。
请注意,这也适用于普通gpg
,不仅适用于gpg2
:)【参考方案3】:
破解方法:
echo -n PASSPHRASE > phrase
chmod 400 phrase #Make sure ONLY the user running the cron job can read the phrase
yes | gpg --passphrase-fd 3 --recipient USER --encrypt FILENAME.txt 3<phrase
根本问题是您拥有的 USER 密钥未签名。如果你信任它,你可以用
签名gpg --edit-key USER sign
它可能会问几个问题,具体取决于您的配置。这样做一次,那么你应该很好地进入你的 crontab。我仍然建议使用我提出的解决方案,将密码放在一个单独的文件中,并使其只能由命令运行的一个用户读取。如果你这样做,你可以杀死yes |
,然后只使用加密行。
【讨论】:
我尝试了签名密钥的方法,都是 gpg2 --edit-key USER 签名,现在显示它已签名,但仍然信任:未知。并且批处理仍然不会在没有提示的情况下运行 我认为lsign
会是一个更好的主意。是不是如果你 lsign 即。本地签名密钥,该签名保留在您的计算机上。但是,如果您只是简单地签名,这将被认为是公开的,因此在您执行 --send-keys
时将被发送到密钥服务器?【参考方案4】:
使用这个命令,它会帮助你
echo "PASSPHRASE" | gpg --passphrase-fd 0 --always-trust -r USER --encrypt FILENAME.TX
【讨论】:
【参考方案5】:我也遇到了这个问题。我无法获得签名密钥来做任何有趣的事情。这是我所做的:
创建一个 gpg 密钥:
gpg --gen-key
获取长密钥 ID(结果在第 5 列):
gpg --list-keys --with-colon name@domain.tld
将可信密钥行添加到 ~/gnupg/gpg.conf
trusted-key 16DIGITALPHANUMERICKEYID
备份脚本中的gpg行:
gpg -e -r name@domain.tld backup_file.tgz
调试 cron: 我还通过将 stdout 和 stderr 发送到 cron 命令行中的日志文件来捕获 cron 调试输出。了解会很有帮助
【讨论】:
不,不要那样做。将trusted-key
行添加到gpg.conf
将导致gpg
始终信任该密钥就像用户自己的密钥之一,which is a bad thing。将--trusted-key
作为参数 传递,并且仅在这种特定情况 是可以接受的(passing --trust-model=always
in the same way 也是如此)。
这是我的钥匙。将其标记为可信不正是我想要的吗?
如果它实际上是您的密钥,那么是的,将其标记为最终受信任(尽管我个人更喜欢使用--edit-key
来做到这一点,而不是通过添加trusted-key
行)。提问者并没有说gpg
抱怨的是他们自己的键。【参考方案6】:
我假设很多人都像我一样来这里是为了“没有键盘交互”的问题。使用 gpg2 和 gpg-agent 在没有任何键盘交互的情况下签名/加密/解密内容变得非常复杂。当您的明文私钥密码短语保存在文本文件中时,您将如何创建签名:
cat something_so_sign.xzy | gpg \
--passphrase-file "plaintext_passphrase.txt" \
--batch \
--pinentry-mode loopback \
-bsa
根据您的需要更改 -b -s -a。其他开关是强制性的。您也可以只使用--passphrase 'SECRET'
。正如已经指出的那样,要小心。当然,纯文本文件并没有那么好。
【讨论】:
【参考方案7】:或者在密钥上签名(当然是在你验证指纹之后):
gpg --sign-key <recipient email address>
之后您完全信任密钥。
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
【讨论】:
信任所有者与此问题无关。仅当您在签署/验证其他密钥及其所有者方面信任他时才设置所有者信任 Ianes 为什么不编辑您的答案以更新有关密钥信任的信息?目前可能具有误导性......另外--lsign-key
可能是一个更好的主意,不是吗?请参阅my other comment 关于 lsign【参考方案8】:
当您第一次使用您的电子邮件 ID 创建证书时,请选择完全受信任的证书,然后每当您加密任何文件时都不会提出类似...的问题。有关更多信息,请在上面的链接中打开图片。
不确定密钥是否属于用户中指定的人 ID。如果你真的知道你在做什么,你可以回答下一个 是的问题。
仍然使用这个键吗? (是/否)
【讨论】:
【参考方案9】:另一种方法:
此解决方案无需用户输入即可工作。
为了拒绝访问敏感数据(而不是使用第三方密钥对其进行加密),我*仅上传我的 PUBLIC 密钥到我想保护数据并使用该密钥进行加密的服务器。这消除了提供密码以促进自动化的交互式提示的需要,最重要的是,PRIVATE 密钥与公共服务器分开。
gpg --batch --yes --trust-model always -r $YOURPUBKEYEMAILADDRESS -e ./file.txt
但是,如果不使用您自己的公钥加密,则使用开关--trust-model always
有点麻烦。无论如何,解决拒绝访问数据问题的不同方法。 HTH- 特伦斯·霍拉汉
【讨论】:
以上是关于无需键盘交互的gpg加密文件[关闭]的主要内容,如果未能解决你的问题,请参考以下文章