我试图svn
从自动脚本中将我的 https 用户名+密码保存到 ~/.subversion 。我可以在命令行上传递凭据,但不希望系统提示我是否以未加密的方式保存密码。不幸的是,这不会创建 ~/.subversion/:
svn --non-interactive --trust-server-cert --username myusername --password secret co https://private.example.com/src/repo/
仅供参考,我正在尝试为一个 Dockerfile 执行此操作,该 Dockerfile 调用bower install
一个bower.json
引用受密码保护的 svn 存储库的 a 。不幸的是,无法bower
通过命令行或环境传递 svn 凭据。
我目前正在通过交互运行 svn 并让它创建 ~/.subversion 来解决这个问题,然后压缩整个目录并将ADD
其放入 Dockerfile 中。我想我可以查看 ~/.subversion 中的文件格式并使用脚本创建它,但宁愿让 svn 来做。
答案1
--username
如果您使用and--password
而不使用--non-interactive
和 ,则会保存凭据--trust-server-cert
。
我假设您正在使用--non-interactive
并--trust-server-cert
避免出现要求您接受证书的提示。为了在没有这些参数的情况下仍然避免出现此提示,您可以让脚本创建为~/.subversion/auth/svn.ssl.server
.该文件对于每个相应服务器的每个人来说都是相同的。我目前正在将此解决方案用于脚本。
答案2
显然--non-interactive
保存用户名但不保存密码。我已经在以下位置启用了密码存储~/.subversion/servers
:
store-passwords = yes
store-plaintext-passwords = yes
store-auth-creds = yes
查看svn help
,没有任何命令或选项看起来相关。我认为这是不可能的。您应该要求 SVN 开发人员确认并提交错误报告。
下面的文件格式auth
不是您想要自己编写脚本的内容。最重要的是,身份验证记录的文件名似乎是一个哈希值。这对脚本不友好。我们需要硬编码密码列表的特殊文件格式或从命令行控制它的方法。
这是我在下面看到的内容~/.subversion/auth/svn.simple/
:
文件名935...dc9e
(32 个字符)。
内容:
K 8
passtype
V 6
simple
K 8
password
V 8
p@$$w0rd
K 15
svn:realmstring
V 48
<https://svn.someplace.com:443> VisualSVN Server
K 8
username
V 5
johny
答案3
我在一个孤立的环境中遇到了这个问题(其中安全性不是问题),并svn ls
通过在 (linux) 命令的帮助下使用正确的凭据在存储库上简单地运行来解决yes
,尽管我发现我必须删除该~/.subversion
目录让它发挥作用。具体来说:
rm -fr ~/.subversion yes yes | svn --username=user --password=guest ls svn://server/repo &>/dev/null
然后所有以下 svn 命令都将在此服务器上使用这些凭据。当然,可以通过管道传输yes yes
到任何具有该--password
选项的 svn 命令。
享受!