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

127

我想知道在使用控制台进行Subversion操作时,是否有办法保存我的Subversion密码。控制台是我唯一的选项。当我尝试执行任何Subversion操作(例如 svn commit)时,每次都会提示输入账号密码。有办法以某种方式保存这个密码,这样就不必每次重新输入它了吗?


1
如果被接受的答案无法解决问题,请参考无法使svn存储密码,即使配置允许进行故障排除。 - maxschlepzig
16个回答

118
在文件 ~/.subversion/config 中,你可能已经设置了 store-passwords = no。请将其更改为 yes(或注释掉因为它默认为 yes),下一次当您提供密码给 Subversion 时,它应该会保存密码。
你可能还想确保 ~/.subversion/config 文件的所有者和权限是正确的(无公共或组访问;600)。

3
如果还没有的话,你可能需要创建它;我认为 SVN 在所有发行版中都会查找那里。 - Michael Mrozek
6
创建了文件 /etc/subversion/config 后,系统按预期运行。谢谢。 - Ish
在Windows下使用TortoiseSVN,配置文件路径为"%APPDATA%\Subversion\config"。 - masterxilo
23
@Seven 更好的做法是,写一个更加更新的答案。(根据我在我的“config”文件中找到的一些默认注释,“config”中的“store-passwords”选项现已被弃用;它已被“servers”中的相同选项所取代。) - Kyle Strand
1
自Subversion 1.12版本起,此答案已过时。请尝试使用官方的“手动保存密码”解决方法 - Igor
显示剩余7条评论

55

这取决于您所使用的协议。如果您使用的是SVN + SSH,则SVN客户端无法保存密码,因为它从未接触过密码 - SSH客户端会直接提示您输入密码。在这种情况下,您可以使用SSH密钥和ssh-agent来避免不断的提示。如果您正在使用svnserve协议或HTTP(S)协议,则SSH客户端正在处理您的密码并可以保存它。


4
我能理解你的问题 - 使用svn+ssh时总是要求输入密码。除了共享公钥,还有其他方法可以避免这个问题吗?我已经尝试过ssh-agent,但没有成功。 - Michael Mikowski
@MichaelMikowski 看起来 SSH 密码无法保存到配置文件以进行自动登录。您可以为其创建新的密钥对,将私钥的位置存储到.ssh/config中,将公钥附加到 SVN 服务器。 - lk_vc

36

尝试清空你的家目录下的 .subversion 文件夹,然后再次尝试提交。它应该会提示你输入密码,然后询问你是否要保存密码。


你的意思是.subversion文件夹吧! - khmarbaise
3
我曾遇到同样的问题。我的配置文件和服务器文件中都没有将任何存储密码的设置设为“no”,但这种方法奏效了。 - Bob B
1
我一直试图更改各种设置,但都没有效果。最终解决这个问题的唯一方法是删除 .subversion 文件夹。 - Michael Noyb
这对我也有效。有趣的是,它将密码存储在我的 ~/.subversion/auth/svn.simple 文件夹中。 - Chetan
1
这对我也起了作用,但我观察了一下有什么不同之处 - 结果是.subversion目录及其文件的所有权。从另一台机器传输数据后,该目录以某种方式归属于root,而应该归属于我。删除该目录并让svn重新创建可以解决该问题(但chown可能也能很好地解决它)。 - Joe Strout
这个有效了。在回答yes后,我再也没有收到提示。但是,在过程中可能会有一个注释说明:您可以通过在“/root/.subversion/servers”中将“store-plaintext-passwords”选项的值设置为“yes”或“no”来避免此警告的未来出现。然而,在回答yes后,“store-plaintext-passwords”并没有在/root/.subversion/servers中指定。实际上,在config或servers中没有任何活动选项。 - TheSatinKnight

23

我必须编辑~/.subversion/servers文件。我将store-plaintext-passwords = yes设置为了“是”(之前是“否”)。这解决了问题,但这可能被认为是不安全的。


4
在同一个文件中,我需要设置 store-passwords = yes。我相信在更新到 SVN 1.7 后,它曾经被设置过,但现在被取消了。 - pieman72

15

从版本1.12开始,保存明文密码在svn中被有意地禁用了。没有配置键可以重新启用此功能。使Subversion保存您的密码为纯文本的唯一方法是在编译时启用它。

然而,Subversion仍然能够读取明文密码。
并且有一个官方脚本可以手动将您的密码保存为纯文本。

  1. 考虑删除~/.subversion/config~/.subversion/servers中的任何编辑内容。如果不确定,请删除这两个文件。
  2. 至少使用您的svn服务器一次(例如,检出某些内容)。
    如果被问及,请验证并永久接受服务器证书指纹。
    这将生成~/.subversion/auth/svn.simple/xxxxx文件(其中“xxxxx”是某个哈希值),但其中还没有密码。
  3. 运行svn auth并注意输出中的
    认证域: <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)。

在 Ubuntu 22 上,仅需使用 apt install subversion 命令,即可安装 svn 版本 1.14.1 (r1886195),测试通过。


1
谢谢!我有Subversion 1.13.0版本,这是唯一有效的答案。 - timeon
谢谢!在SUSE Linux和svn版本1.14.1上也对我起作用。 - Tim Dearborn
1
谢谢!这是唯一让我最终启动的东西。svn:1.14.1,Ubuntu 22.04.2 LTS - Slvrfn
谢谢,对我也适用,尽管我只是从一个服务器复制到另一个服务器而已。 - undefined

14

强调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版本已启用明文密码存储,那么请按照这里提供的所有其余答案进行操作。


谢谢。对于我的svn v1.14,GPG-Agent是唯一的选项。 - silencej

9

这些精彩的答案都没有在我新安装的Ubuntu上起作用。相反,这个答案中的提示对我很有帮助。

我必须通过在~/.subversion/config中将此项设为空来允许“简单”密码存储:

password-stores =

由于之前没有任何设置,所以空白非常重要。

这还不仅仅是:

store-passwords = yes

~/.subversion/servers文件中。


这也帮助了我,因为似乎默认选项应该可以工作,但除非明确指定,否则它不起作用 :( - Arunas Bartisius
我不得不使用password-stores = gnome-keyring而不是一个空的设置。 - Thomas Rebele

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

现在可以在您配置目录中的“servers”文件中指定“store-passwords”和“store-auth-creds”。在此部分中指定的任何内容都将被“servers”文件中指定的设置所覆盖。

这适用于SVN版本1.6.12。因此请记住编辑服务器文件,因为它会覆盖~/.subversion/config

这有助于看到同一文件中的覆盖(两个“password-stores”声明!)。纠正了这个问题,svn.simple文件就创建了,其中包含gnome-keyring属性。 - Danielson Alves Júnior

7

对于我这个Mac用户来说,问题在于钥匙串中已经存储了我的凭据,但访问权限不正确。

通过删除钥匙串应用程序中的条目,然后使用svn重新创建它,问题得到了解决。


5
如果您使用的是 svn+ssh,您可以将您的公钥复制到远程机器上:
ssh-copy-id user@remotehost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接