从控制台使用 Subversion 时如何保存密码

我想知道在从控制台执行 svn操作时是否有保存 Subversion 密码的方法。控制台是我唯一的选择。当我尝试执行任何 Subversion 操作(例如 svn commit)时,它每次都会提示输入帐户密码。有没有办法保存这个密码,这样我就不用每次都重新输入了?

181150 次浏览

尝试清除您的主目录中的 .subversion文件夹,并尝试再次提交。它会提示您输入密码,然后询问您是否要保存密码。

~/.subversion/config中,你可能有 store-passwords = no。将其更改为 yes(或者仅仅注释掉它,因为它默认为 yes) ,下次您给 Subversion 您的密码时,它应该保存它。

您可能希望确保 ~/.subversion/config的所有者和权限是正确的(没有公共或组访问; 600)。

这取决于你使用的协议。如果您使用的是 SVN + SSH,那么 SVN 客户机就无法保存您的密码,因为它从来不接触它—— SSH 客户机会直接提示您输入密码。在这种情况下,可以使用 SSH 密钥和 SSH-agent 来避免常量提示。如果您正在使用 svnserver 协议或 HTTP (S) ,那么 SSH 客户机将处理您的密码并可以保存它。

我不得不编辑 ~/.subversion/servers。我设置了 store-plaintext-passwords = yes(以前没有)。成功了。不过这可能会被认为是不安全的。

请注意 ~/.subversion/servers文件中的以下段落:

Both 'store-passwords' and 'store-auth-creds' can now be specified in the 'servers' file in your config directory. 本节中指定的任何内容都将被设置覆盖 在「伺服器」档案内指定。

它至少适用于 SVN 版本1.6.12。因此,请记住在编辑服务器文件时也要覆盖 ~/.subversion/config

如果密码曾被用作其他用途,那么使用明文可能不是最佳选择。

我支持接受的答案,但它不适合我-为一个非常具体的原因: 我想使用 kwalletgnome-keyring密码存储。我试着修改了四个文件的设置:

/etc/subversion/config
/etc/subversion/servers
~/.subversion/config
~/.subversion/servers

即使在所有内容都被设置为相同,使用 password-stores和 KWallet 名称(默认值可能是错误的,对吗?)它没有工作,并不断要求密码永远。~/.subversion中的文件的权限为600。

那么,在这一点上,你可以尝试检查一个简单的事情:

which svn

如果你得到:

/usr/bin/local/svn

那么您很可能怀疑这个客户机是由您的管理员(可能是您自己,就像我的情况一样)从源代码在本地构建的。

Subversion 是编译 的一个讨厌的怪兽,很容易在没有 HTTP 支持的情况下意外构建,或者——就像我的例子——没有对加密密码存储的支持(您需要 Gnome 或 KDE 开发文件,而且需要很多这样的文件!).但是 ./configure脚本不会告诉您这一点,您只能得到一个功能较差的 svn命令。

在这种情况下,您可以返回到客户机,它与您的发行版一起提供,通常是在 /usr/bin/svn中。缺点是-您可能需要重新签出工作副本,因为没有 svn downgrade命令。无论如何,您可以参考 莱纳斯 · 托瓦兹,了解如何考虑 Subversion;)

如果使用 Svn + ssh,可以将公共 ssh 密钥复制到远程计算机:

ssh-copy-id user@remotehost

不幸的是,这些答案并没有解决要求使用受保护的私钥为 ssh + svn 输入密码的问题。经过一番研究,我发现:

ssh-add

如果你有一台 Linux 计算机。确保您的密钥存储在 /home/username/.ssh/中,并在终端上键入此命令。

我正在 Windows 上使用 TortoiseSVN客户端,对我来说,在 %USERPROFILE%\AppData\Roaming\Subversion\config中将 store-password 参数设置为 yes无助于存储密码。

删除此文件夹后成功保存密码(以防重命名) :

%USERPROFILE%\AppData\Roaming\Subversion\auth

环境:

Windows 7, TortoiseSVN 1.7.11 (Build 23600 - 64 bit, 2012-12-12T19:08:52), Subversion 1.7.8.

对我(Mac 用户)来说,问题在于 keychain 已经为我的凭证存储了一个条目,但是访问权限不正确。

删除密钥链应用程序中的条目,然后使用 svn 重新创建它,修复了问题。

这些精彩的答案对我来说都不适用于新安装的 Ubuntu。相反,来自 这个答案的一个线索帮了我大忙。

我必须通过在 ~/.subversion/config中设置这个空值来允许“简单”密码存储:

password-stores =

没有现有的设置,所以空是非常重要的。

此外还有:

store-passwords = yes

~/.subversion/servers

To add to Heath's answer: It looks like Subversion 1.6 disabled storing passwords by default if it can't store them in encrypted form. You can allow storing unencrypted passwords by explicitly setting password-stores = (that is, to the empty value) in ~/.subversion/config.

To check which password store subversion uses, look in ~/.subversion/auth/svn.simple. This contains several files, each a hash table with a simple key/value encoding. The svn:realmstring in each file identifies which realm that file is for. If the file has

K 8
passtype
V 6
simple

然后它将密码以纯文本的形式存储在该文件中的某个位置,即 K 8 password条目中。否则,它将尝试使用配置的 password-stores之一。

这里提到的所有方法对我都不起作用。我从源代码构建了 Subversion,我发现,我必须用 --enable-plaintext-password-storage运行 configure 来支持这个特性。

只是为了强调 Tomasz Gandor 和 Domain 所说的关于拥有正确的 svn 版本以及它被编译为支持纯文本密码存储的内容,您需要验证您拥有的内容:

svn --version
svn, version 1.9.7 (r1800392)
...
WARNING: Plaintext password storage is enabled!
...


The following authentication credential caches are available:


* Plaintext cache in /gr/home/ffvdqb/.subversion
* GPG-Agent

反对:

svn --version
svn, version 1.12.2 (r1863366)
...


The following authentication credential caches are available:


* Gnome Keyring
* GPG-Agent
* KWallet (KDE)

一旦您看到您的 svn 版本已经启用了纯文本密码存储,那么就应用这里的所有其他答案。

保存明文密码是从1.12版开始在 svn 中使用的 故意伤害。没有重新启用该特性的配置键。使 Subversion 将您的密码保存为纯文本的唯一方法是在编译时启用它。

但是,Subversion 仍然能够输入 的明文密码。
And there's an official script to manually save your password as a plain text.

  1. 考虑删除任何编辑从 ~/.subversion/config~/.subversion/servers。只是删除这两个文件,如果有疑问。
  2. 至少使用一次你的 svn 服务器(例如签出一些东西)。如果需要,验证并永久接受服务器服务器证书指纹。< br > 这将生成 ~/.subversion/auth/svn.simple/xxxxx文件(其中“ xxxxx”是一些散列) ,但是它中还没有密码。
  3. 运行 svn auth并注意输出中的 < br > Authentication realm: <https://myserver.mydomain:12345> VisualSVN Server字符串。
  4. 使用官方解决方案脚本将密码存储为明文:
wget https://svn.apache.org/repos/asf/subversion/trunk/tools/client-side/store-plaintext-password.py
chmod +x store-plaintext-password.py
./store-plaintext-password.py -u your_username "<https://myserver.mydomain:12345> VisualSVN Server"
  1. 双重检查 ~/.subversion/auth/svn.simple/xxxxx现在实际上包含您的密码
  2. chmod 700 ~/.subversion/auth/svn.simple/xxxxx
  3. chmod 700 ~/.subversion/auth/svn.simple
  4. 再次尝试使用 svn 服务器(例如 svn update)。

刚刚测试了 svn 版本1.14.1(r1886195) ,在 Ubuntu 22上安装了简单的 apt install subversion