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

Posted

技术标签:

【中文标题】从控制台使用 Subversion 时如何保存密码【英文标题】:How to save password when using Subversion from the console 【发布时间】:2011-02-23 08:39:34 【问题描述】:

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

【问题讨论】:

如果接受的答案不起作用,另请参阅can't make svn store password, even though the configuration is set to allow it 进行故障排除。 【参考方案1】:

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

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

【讨论】:

我在Red Hat Linux 2.6.18 中找不到此文件。知道它可能在哪里吗? @Ish 如果它尚不存在,您可能需要制作它;我认为 SVN 在所有发行版中都存在 +1,创建文件/etc/subversion/config 后,系统按预期工作。谢谢 @IshKumar 谢谢!第一次为我工作! @Seven 更好的是,只需写一个更新的新答案。 (根据我在config 文件中找到的一些默认cmets,config 中的store-passwords 选项现在已弃用;它已被servers 中的相同选项替换。)【参考方案2】:

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

【讨论】:

+1 我有这个确切的问题 - svn+ssh 总是,总是要求我输入密码。除了共享公钥之外,有没有办法避免这种情况?我试过 ssh-agent,但没有成功。 @MichaelMikowski 似乎无法将 SSH 密码保存到配置中以进行自动登录。您可以为其创建一个新的密钥对,将私钥的位置存储到.ssh/config,将公钥附加到SVN服务器。【参考方案3】:

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

【讨论】:

你的意思是 .subversion 文件夹! 我遇到了同样的问题。我没有在我的配置或服务器文件中将任何存储密码设置设置为“否”,但这有效。 我尝试更改各种设置均无济于事。最终解决这个问题的唯一方法确实是删除了 .subversion 文件夹。 这对我也有用。有趣的是,它为我将密码存储在 ~/.subversion/auth/svn.simple 文件夹中。 这也是为我做的,但我观察了其中的区别——结果证明是 .subversion 目录及其文件的所有权。从另一台机器传输数据后,这个目录不知何故最终归根拥有,而它应该归我所有。删除目录并让 svn 重新创建它可以解决问题(但 chown 可能也会解决它)。【参考方案4】:

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

【讨论】:

在同一个文件中,我必须设置store-passwords = yes。我相信它是以前设置的,但是当我更新到 SVN 1.7 时没有设置【参考方案5】:

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

“store-passwords”和“store-auth-creds”现在都可以 在配置目录的“服务器”文件中指定。 本节中指定的任何内容都被设置覆盖 在“服务器”文件中指定。

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

【讨论】:

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

在全新安装的 Ubuntu 上,这些精彩的答案都不适合我。相反,来自this 答案的线索对我有用。

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

password-stores =

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

这是除了:

store-passwords = yes

~/.subversion/servers.

【讨论】:

这对我也有帮助,因为似乎默认选项应该可以工作,但除非明确指定,否则它不会:( 我不得不使用password-stores = gnome-keyring,而不是一个空设置。【参考方案7】:

为了强调 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 版本启用了纯文本密码存储,然后在此处应用所有其余答案。

【讨论】:

【参考方案8】:

如果您使用 svn+ssh,您可以将您的公共 ssh 密钥复制到远程机器:

ssh-copy-id user@remotehost

【讨论】:

【参考方案9】:

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

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

【讨论】:

【参考方案10】:

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

我支持接受的答案,但它对我不起作用 - 出于一个非常具体的原因:我想使用 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 的看法;)

【讨论】:

【参考方案11】:

添加到 Heath 的答案:如果 Subversion 1.6 不能以加密形式存储密码,则默认情况下它似乎禁用了存储密码。您可以通过在~/.subversion/config 中显式设置password-stores =(即为空值)来允许存储未加密的密码。

要检查哪个密码存储颠覆使用,请查看~/.subversion/auth/svn.simple。这包含几个文件,每个文件都有一个带有简单键/值编码的哈希表。每个文件中的svn:realmstring 标识该文件用于哪个领域。如果文件有

K 8
passtype
V 6
simple

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

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

我在 Windows 上使用 TortoiseSVN 客户端,对我来说,在 %USERPROFILE%\AppData\Roaming\Subversion\config 中将 store-passwords 参数设置为 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.

【讨论】:

谢谢。我尝试了一切,但没有任何效果。然后我重命名了“auth”文件夹并再次尝试。该文件夹在 auth/svn.simple/ 文件中重新生成,内容略有不同,然后它就可以正常工作了。【参考方案14】:

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

ssh-add

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

【讨论】:

以上是关于从控制台使用 Subversion 时如何保存密码的主要内容,如果未能解决你的问题,请参考以下文章

如何为控制台应用程序提供密码?

mac JetBrains IDE(WebStromIntelliJ IDEA) svn无法保存密码,反复提示输入密码

subversion如何在存储库中存储文件?

如何查看浏览器缓存密码自动保存的密码

版本控制(即 Subversion)是不是适用于文档跟踪? [关闭]

如何避免在版本控制中存储密码?