如何让 svn 在 --non-interactive 时保存凭据

如何让 svn 在 --non-interactive 时保存凭据

我试图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 命令。

享受!

相关内容