sh Shell中无需显式文件创建实现GPG密钥导入单行命令方案
解决sh环境下GPG密钥自动化导入的单行命令问题
你的问题出在原来的命令用了Bash专属的进程替换特性(<(...)),而POSIX标准的sh并不支持这个语法,所以直接运行会报错。下面给你一个完全兼容sh的单行命令,同时保留密码传递和密钥导入的自动化逻辑:
可行的单行命令
( echo "$KEY_PASSWORD" | exec 3<&0; echo "$KEY" | base64 -d | gpg --batch --passphrase-fd 3 --yes --import - )
为什么这样能行?
我拆解一下每个部分的作用:
- 整个命令用子shell
(...)包裹,避免修改当前shell的文件描述符,保证环境干净。 echo "$KEY_PASSWORD" | exec 3<&0:把密码输出到管道后,通过exec将管道的内容(也就是密码)绑定到文件描述符3上,这样gpg就能从fd3读取密码,不会和密钥的输入冲突。echo "$KEY" | base64 -d:将Base64编码的密钥解码,通过管道直接传给gpg的标准输入。gpg --batch --passphrase-fd 3 --yes --import -:指定从fd3读取密码,从标准输入(-明确表示读取stdin)获取解码后的密钥,--batch禁用交互模式,--yes自动确认覆盖现有密钥,完全实现自动化。
这个方案全程不需要创建临时文件,所有操作都在内存中完成,安全性也更有保障。
内容的提问来源于stack exchange,提问作者Oleksandr Dievri
相关产品推荐
相关产品推荐

