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


106

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


另请参见即使设置已配置为允许进行故障排除(如果接受的答案无效),也不能使svn存储密码
maxschlepzig 2014年

Answers:


110

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

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


我在中找不到此文件Red Hat Linux 2.6.18。知道在哪里吗?
伊什

3
@Ish如果尚不存在,可能需要创建它。我认为SVN看起来有在所有发行版
迈克尔Mrozek

5
+1,创建文件/etc/subversion/config系统后按预期工作。谢谢
Ish

@IshKumar谢谢!第一次为我工作!
阿尼尔

15
@Seven更好,只是写一个最新的新答案。(根据我在文件中发现的一些默认注释,现在不建议使用store-passwordsin中的选项;它已由中的相同选项替换。)configconfigservers
Kyle Strand

54

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


4
+1我有这个确切的问题-svn + ssh总是,总是要求我输入密码。除了共享公共密钥外,还有什么方法可以避免这种情况?我已经尝试过ssh-agent,但是没有运气。
Michael Mikowski 2012年

@MichaelMikowski似乎无法将SSH密码保存到配置中以进行自动登录。您可以为其创建一个新的密钥对,将私钥的位置存储到.ssh/config,然后将公钥附加到SVN服务器。
lk_vc 2014年

33

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


您的意思是.subversion文件夹!
khmarbaise

3
我有同样的问题。我没有在配置文件或服务器文件中将任何存储密码设置设置为“ no”,但这可以正常工作。
Bob B

1
我试图将各种设置更改为无效。最终解决此问题的唯一方法是删除.subversion文件夹。
Michael Noyb 2012年

这也为我工作。有趣的是,它为我将密码存储在〜/ .subversion / auth / svn.simple文件夹中。
Chetan

这也为我做到了,但我观察了一下有什么区别,事实证明这是.subversion目录及其文件的所有权。从另一台机器传输数据后,该目录最终以某种方式最终归root拥有,而该目录应该由我拥有。删除目录并让svn重新创建它可以解决此问题(但是chown可能也可以解决该问题)。
Joe Strout

19

我不得不编辑~/.subversion/servers。我设置了store-plaintext-passwords = yes(以前没有)。做到了。但是,它可能被认为是不安全的。


3
在同一文件中,我必须设置store-passwords = yes。我相信它是以前设置的,但是当我更新到SVN 1.7时,它没有被设置
pieman72

9

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

现在,可以在配置目录中的“服务器”文件中同时指定“商店密码”和“商店身份验证”。本节中指定的所有内容均会被“服务器”文件中指定的设置所覆盖。

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


这有助于看到在同一文件中有一个覆盖(两个“密码存储”声明!)。更正了该问题,并使用gnome-keyring属性创建了svn.simple文件。
Danielson

5

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

ssh-copy-id user@remotehost

5

对于我(Mac用户)而言,问题是钥匙串已经存储了用于我的凭据的条目,但是访问权限不正确。

删除密钥链应用程序中的条目,然后使用svn重新创建该条目即可解决此问题。


4

在全新安装的Ubuntu上,这些出色的答案都不对我有用。取而代之的是,从这个答案中得到的线索对我有用。

我必须通过在~/.subversion/config以下位置将此空设置来允许“简单”密码存储:

password-stores =

没有现有设置,因此为空很重要。

除此以外:

store-passwords = yes

在中~/.subversion/servers


这也帮助了我,似乎默认选项应该可以工作,但是除非明确指定,否则它不会:(
Arunas Bartisius

3

如果曾经将密码用作其他密码,则使用纯文本可能不是最佳选择。

我支持已接受的答案,但是它对我不起作用-出于特定原因:我想使用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命令,您可能需要重新检出工作副本。无论如何,您都可以向Linus Torvalds咨询有关Subversion的想法;)


2

要补充希思的答案:如果Subversion 1.6无法以加密形式存储密码,则默认情况下它似乎已禁用存储密码。您可以通过在中显式设置password-stores =(即为空值)来存储未加密的密码~/.subversion/config

要检查使用哪个密码存储库颠覆,请查看~/.subversion/auth/svn.simple。它包含几个文件,每个文件都有一个简单的键/值编码的哈希表。在svn:realmstring每个文件中识别哪个境界该文件为。如果文件有

K 8
passtype
V 6
simple

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


1

这里提到的所有方法都不适合我。我从源代码构建了Subversion,发现,我必须运行configure with --enable-plaintext-password-storage以支持此功能。


1

只是为了强调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

我使用的是TortoiseSVN的在Windows客户端,对我来说,设置店,密码参数作为%USERPROFILE%\AppData\Roaming\Subversion\config不利于存储密码。

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

%USERPROFILE%\AppData\Roaming\Subversion\auth

环境:

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

0

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

ssh-add

实用程序(如果您有Linux计算机)。确保已存储密钥,/home/username/.ssh/然后在终端上键入此命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.