我写了一个生成无人值守GPG密钥的bash脚本,我查看了GPG的无人值守使用情况,并惊奇地发现'目前只能处理一个子密钥。
我无法find是否有一种方法来修改一个GPG键来添加第二个子键使用可用的无人参与的生成函数,或者如果我不得不手动添加子项我自己。
我试图在here documents使用here documents , here strings和每行一个input创build一个文件以及使用printf类似于下面:
printf 'addkey' | gpg2 --edit-key '[email protected]'
没有这些解决scheme的工作:
balthasar@magi:~$ printf 'addkey' | gpg2 --edit-key '[email protected]' printf 'addkey' | gpg2 --edit-key '[email protected]' gpg (GnuPG) 2.0.26; Copyright (C) 2013 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Secret key is available. pub 4096R/AB96CED4 created: 2016-12-02 expires: 2017-09-02 usage: SC trust: ultimate validity: ultimate sub 2048R/71804CF2 created: 2016-12-02 expires: 2017-09-02 usage: E [ultimate] (1). test3 <[email protected]> gpg>
我的GPG密钥文件
Key-Type: RSA Key-Length: 4096 Key-Usage: sign Subkey-Type: RSA Subkey-Length: 2048 Subkey-Usage: encrypt Name-Real: Foo Bar Name-Email: [email protected] Expire-Date: 2017-09-02 %ask-passphrase %commit
更新:2016年12月4日
我已经通过使用下面的代码片段通过了获取GPG的一些input的第一个障碍:
~$ stty -echo; gpg2 --edit-key <keyname> "addkey"
但是,运行addkey命令后,我无法'pipe道'input。
要让gpg2从stdin中读取你的命令,使用--command-fd=0 。 要让gpg2从它读取命令的地方读取主密钥的密码,请使用--pinentry-mode=loopback 。 ( gpg2 --help没有列出这些开关,但是它们被logging在手册页中。)使用这些开关,您可以非交互式地与gpg2进行通信。
我通过运行与以下类似的命令来添加一个子键给现有的主键:
key=0123456789ABCDEF passphrase="my passphrase" { echo addkey echo 4 # RSA (sign only) echo 4096 # key length echo 0 # key does not expire echo y # is this correct? echo y # really create? echo "$passphrase" echo save } | gpg2 --command-fd=0 --status-fd=1 --pinentry-mode=loopback --edit-key $key