我使用gpg
加密文件,现在我要解密该文件。
有没有办法解密文件而无需导入密钥文件?
我们在名为key.sec
的文件中有密钥;我们可以将秘密文件作为参数(当我们从gpg
命令行运行decrypt
命令时)传递给bash
,以便在解密加密文件时使用吗?或者我们必须导入密钥然后解密加密文件吗?
答案 0 :(得分:11)
您必须将密钥添加到密钥环。来自gpg(1)
文档:
--no-default-keyring
Do not add the default keyrings to the list of
keyrings. Note that GnuPG will not operate without any
keyrings, so if you use this option and do not provide
alternate keyrings via --keyring or --secret-keyring,
then GnuPG will still use the default public or secret
keyrings.
您可以--import --no-default-keyring --secret-keyring temporary
导入密钥,在解密内容时使用--secret-keyring temporary
,然后在完成后删除~/.gnupg/temporary.gpg
文件。但这只是一种解决方法。
答案 1 :(得分:4)
您必须导入密钥以使用它,但GnuPG版本2.x管理密钥的方式已更改。有一个gpg-agent
守护程序可以处理密钥访问,并且从2.1版开始必须使用它。
这是一种可以快速创建临时密钥环以使用文件中包含的密钥进行解密的方法:
$ mkdir -m 700 ~/.gnupg-temp
$ gpg --homedir .gnupg-temp --import key.sec
$ gpg --homedir .gnupg-temp -d an_ecrypted_file
如果您想要事后清理,请停止代理并删除目录:
$ gpg-connect-agent --homedir .gnupg-temp KILLAGENT /bye
$ rm -r ~/.gnupg-temp
曾经有一个选项--secret-keyring
,版本2.1的documentation就是这样说的:
这是一个过时的选项并被忽略。所有密钥都存储在GnuPG主目录下的private-keys-v1.d目录中。
private-keys-v1.d
目录(--homedir
或~/.gnupg
)由代理商拥有并运营。
答案 2 :(得分:1)
穆罕默德OP的目标似乎是将他的 PUBLIC 和 SECRET 键分开。毕竟, 我们要保留密钥与用于加密的数据吗? 因此,穆罕默德(Mohammed's)和其他10,650+个人(在我写这篇文章时)是对是否/如何可能感兴趣。 确实如此,这就是您的操作方式:
面向公众的主机只有两个密钥: 两个都是公共密钥
您的 GPG 用于加密数据的公钥
您的 SSH 中的 .ssh / authorized_keys 中的公钥,以方便非交互式登录。
使用公钥与密钥分离对加密文件进行三元处理:
以下bash片段在使用 Secret Key 在主机上执行时,将通过scp从DMZ主机中获取加密文件,并将gpg解密后的标准输出喷射回DMZ托管到文件中,以便可以对其进行读取/操作。此代码已经过测试,可以正常工作:
echo "$(gpg -d $(scp myuser@192.168.1.10:/home/myuser/test-gpg.txt.asc .;ls ./test-gpg.txt.asc))" | ssh myuser@192.168.1.10 'cat > /home/myuser/test-gpg.txt'
请注意,解密开始后,仍然会提示您输入密码 。但是一旦提供了密码,脚本便会继续并将解密的gpg流注入DMZ主机上的文件中。
一旦完成要求其内容可读的操作,别忘了对解密文件进行rm test-gpg.txt
处理。
是的, 非常 可以使您的密钥与进行加密的可公开访问的主机分开,并将您的密钥安全地藏在该DMZ之外的主机中。 HTH- Terrence Houlahan