以下是通行证的信息:https://www.passwordstore.org
我的关键点是,我想在命令行传递密码密钥。然而,我能找到的与这个问题相关的主题和解决方案不适用于我的情况。
当我检查Pass的代码时,我发现了一个名为PASSWORD_STORE_GPG_OPTS的参数。据我所知,应该可以用它来通过--pinentry-mode=loopback --passphrase "<此处密码>"到由Pass执行的gpg。执行它的代码片段在这里:
#Line 9
GPG_OPTS=( $PASSWORD_STORE_GPG_OPTS "--quiet" "--yes" "--compress-algo=none" "--no-encrypt-to" )
#(...)
#Line 387
pass="$($GPG -d "${GPG_OPTS[@]}" "$passfile" | $BASE64)" || exit $?
但是,由于某种原因,这不起作用。
那么问题来了,是否可以使用这个参数将passphrase传递给gpg并在没有提示的情况下使用pass呢?如果没有,那么还有其他方法吗?
编辑:正如@他们建议的,这里是我正在做的事情的信息:
设置变量:
export PASSWORD_STORE_GPG_OPTS="--pinentry-mode=loopback --passphrase '<password_goes_here>'"
备注:密码仅包含大小写字母和数字 - 没有空格或其他字符。
然后,执行以下命令:
pass address/to/some/password
结果是:
gpg: decryption failed: No secret key
答案1
就我而言,正如@他们所建议的,问题是使用(出于未知原因......)引号。没有他们,一切都像魅力一样运转。
答案2
作为从字符串中读取密码的替代方法,如上所述,还可以通过某个文件处理密码:
export PASSWORD_STORE_GPG_OPTS="--pinentry=loopback --passphrase-file /path/to/.passphrase"
使用散列密码似乎不可能(例如,使用mkpasswd -m sha-512 passphrase > /path/to/.passphrase-hashed
),因此需要以纯文本形式给出。