我在Debian拉伸机上使用Subversion客户端(版本1.9.5 r1770682,安装于默认的包存储库),我只能访问该机器。我正在通过HTTPS连接到Subversion存储库,并且希望避免每次执行svn up或svn ci命令时都必须重新键入我的密码。我还想避免将密码以明文形式存储在磁盘上。
SVN书建议我应该能够使用GPG来缓存我的密码。尽管svn --version报告GPG身份验证证书缓存应该可用,但我在让它工作时遇到了一些困难。
关于GPG,我创建了一个GPG密钥对,将export GPG_TTY=$(tty)添加到我的.profile文件中,并验证了GPG通过加密和解密一段文本来工作。
关于Subversion,在我的.subversion/config文件中,我设置了以下内容:
$ grep '^[^#]' < .subversion/config
[auth]
password-stores = gpg-agent
[helpers]
[tunnels]
[miscellany]
[auto-props]
[working-copy]在我的.subversion/servers文件中,我设置了以下内容:
$ grep '^[^#]' < .subversion/servers
[groups]
[global]
store-passwords = yes
store-plaintext-passwords = no但是,当我执行svn命令时,没有缓存密码。有人对我可能做错了什么有什么建议吗?是否有人成功地使用GPG代理来缓存HTTPS密码?(也许此凭据缓存仅用于SVN+SSH连接?)
任何帮助都将不胜感激。
发布于 2019-08-20 17:44:39
我终于找到了一个解决我的问题的办法,从上面罗曼的建议开始,再一次研究这个问题。Subversion客户端的find_gpg_agent_socket函数的GPG-代理认证源代码中的注释确实解释了:
$GPG_AGENT_INFO优先,如果设置,否则将使用$GNUPGHOME。 (...) 作为参考,GPG_AGENT_INFO由3:分隔字段组成。套接字的路径,gpg-代理进程的pid,以及代理对话的协议的最终版本。
通过在命令行上调用gpgconf --list-dirs agent-socket,可以很容易地找到GPG套接字的路径。$GPG_AGENT_INFO变量的其他两个部分不被Subversion客户端使用,因此不一定要设置。
因此,我在我的.profile文件末尾添加了以下代码:
export GPG_TTY=$(tty)
export GPG_AGENT_INFO=`gpgconf --list-dirs agent-socket | tr -d '\n' && echo -n ::`这将$GPG_TTY变量设置为当前终端,$GPG_AGENT_INFO变量设置为GPG套接字,后面跟着两个冒号字符(即Subversion源代码所期望的格式)。
Subversion似乎在~/.subversion/auth中缓存存储库的身份验证设置(),因此在正确使用GPG之前,我发现有必要清除该目录:
rm -rf ~/.subversion/auth启动新会话后,您应该能够验证$GPG_AGENT_INFO变量的设置是否正确:echo $GPG_AGENT_INFO应该输出类似于/run/user/1000/gnupg/S.gpg-agent::的内容(其中1000是当前用户的uid )。
例如,在执行Subversion命令时,您的密码将在第一次提示:
Updating '.':
Enter your Subversion password for <https://example.com:443> Subversion Repository
Password for 'username': :
At revision 123.当随后对同一个存储库执行第二个Subversion命令时,Subversion应该使用GPG-Agent缓存的密码:
Updating '.':
At revision 123.编辑:我的印象是,当第一次使用存储库时(即当它还没有出现在Subversion的缓存中时),密码只有在输入两次后才能被GPG正确保存。
发布于 2019-08-09 18:35:58
这个线程似乎给出了一个提示:用户/WS8Cr7mAovQ
我在Ubuntu上运行Xfce,我也遇到了同样的问题。显然,原因是没有设置$GPG_AGENT_INFO环境变量。手动运行/etc/X11/Xsession.d/90gpg-agent脚本(设置此变量)确实对我有所帮助。
https://stackoverflow.com/questions/48390012
复制相似问题