【问题标题】:Can't make SVN store passwords, even though the configuration is set to allow it无法让 SVN 存储密码,即使配置设置为允许
【发布时间】:2011-02-05 15:45:41
【问题描述】:

我做了书中所说的一切,即从 .subversion/auth 中删除了身份验证文件,并将相关配置参数显式设置为“是”,即使这是默认设置,但 shell SVN 命令每次都要求输入密码。存储库位于 cvsdude.com,客户端是 Linux。我还使用了缓存密码的 Subclipse 插件 OK。

我依稀记得,当我开始使用它时,命令交互询问我是否要保存明文密码,我说不。这个选项可以存储在某个地方并优先于配置吗?

【问题讨论】:

  • 在运行桌面环境(GNOME、KDE ​​等)时正在运行 svn,或者说,在 ssh 进入机器时?
  • 您是否使用svn+ssh://登录?
  • 另外,我们可以查看您的~/.subversion/config~/.subversion/servers 文件的内容吗?仅来自config[auth] 部分和来自servers[global] 可能就足够了。
  • 感谢您的 cmets 我发现了问题 - 它是服务器文件中的设置(不要存储纯密码)。我想知道为什么配置文件中的 [auth] 部分会出现这种冗余。此外,这本书在谈到存储密码时也没有提到它。再次感谢!
  • 在配置文件中,有一行:### 此文件中本节的其余部分已被弃用。 ### 'store-passwords' 和 'store-auth-creds' 现在都可以在配置目录的 'servers' 文件中指定###。 ### 本节中指定的任何内容都会被“服务器”文件中指定的设置### 覆盖。

标签: svn


【解决方案1】:

使用最新版本的 Subversion (~ 1.8),您可以通过 $HOME/.subversion/servers 配置密码缓存:

[global]
store-passwords = yes
store-plaintext-passwords = yes

但根据您的系统,这可能还不够。如果不是,请确保 $HOME/.subversion/config 包含:

[auth]
password-stores =

这意味着变量 password-stores 被显式设置为空字符串(背景是 svn 现在包含对某些密钥代理工具的支持 - 并且与默认配置的工具的接口可能很脆弱 - 导致静默忽略上述选项和非缓存行为)。

第一次使用 svn 时,层次结构 $HOME/.subversion 在第一次 svn 操作后创建 - 例如。进行第一次结帐时。 Subversion 然后创建提到的文件并用最重要的选项填充它们 - 被注释掉,包括一些文档。

因此,将旧的$HOME/.subversion 目录移开以有一个明确定义的起点也是有意义的。

另一个陷阱是权限 - 即在$HOME/.subversion 下不可读的文件 - 但这通常不是问题,因为当svn 创建它们时,它会处理正确的权限(例如,auth 目录仅然后由用户读取,而不是由组/全部读取,独立于配置的 umask)。

【讨论】:

  • 请注意password-stores = 行必须放在[auth] 部分。
  • @ThomasLeonard,是的,将节标题添加到配置 sn-p。
  • +1 关于 password-stores = 的提示拯救了我的一天。谢谢! :)
  • 这两个文件都不是在我这边创建的,我必须创建这些文件并像你说的那样填写($HOME/.subversion/config$HOME/.subversion/servers)。它对我有用(Oxygen 3 - Mars 2018),非常感谢我的朋友!
  • 我认为需要注意的是,从SVN 1.12开始,纯文本存储在编译时默认是禁用的(=如果你想要这个功能,你必须自己重新编译SVN),所以现在一个空白@ 987654334@ 行不再起作用(例如,您需要启动 gpg-agent --daemon 进程和像 password-stores = gpg-agent 这样的 SVN 配置)。请参阅subversion.apache.org/docs/release-notes/…“在类 Unix 系统上,客户端在磁盘上以明文形式存储密码现在默认在编译时禁用。”。
【解决方案2】:

维尼

我相信我什么都试过了:

  • 检查了服务器配置
  • 检查~/.subversion权限,全部600
  • 检查 ~/.subversion/config 文件
    • store-plaintext-passwords = 是
    • 存储密码 = 是
    • store-auth-creds = 是
      • 使用我的用户名在[global][groups] 部分执行上述操作
  • 检查了 ~/.subversion/servers 文件
    • 同上

对于所有配置文件,我验证了所有部分,还输入了一个错误的参数,并验证了 svn 客户端停止工作(因此,正在读取配置文件 )。

  • 删除并重新创建了 ~/.subversion/auth 目录

检查$HOME/.subversion/config 中的客户端配置是否禁用密码存储:

[auth]
### Set password stores used by Subversion. They should be
### delimited by spaces or commas. The order of values determines
### the order in which password stores are used.
# password-stores = gpg-agent,gnome-keyring,kwallet
### To disable all password stores, use an empty list:
password-stores =
### Both 'store-passwords' and 'store-auth-creds' can now be
### specified in the 'servers' file in your config directory
### and are documented there. Anything specified in this section
### is overridden by settings specified in the 'servers' file.
store-passwords = yes    # just in case
store-auth-creds = yes   # just in case

没有任何效果。

维迪

然后我阅读了精美的手册。一切都是徒劳的:你不可能做到这一点。 “在 Unix 系统上,默认情况下,客户端在磁盘上以明文形式存储密码在编译时被禁用”。

维西

幸运的是,读取密码的部分仍然存在于客户端二进制文件中。因此,如果密码恰好被存储,它会起作用。我正在运行 SVN 1.13:

svn, version 1.13.0 (r1867053)
   compiled Mar 24 2020, 12:33:36 on x86_64-pc-linux-gnu

所以我打开了刚刚在~/.subversion/auth/svn.simple 目录中创建的文件(它可能包含多个文件,您可能需要检查它们以找到具有所需领域的文件)并找到以下内容:

K 15
svn:realmstring
V 37
<svn://home.sweet.home:3690> Profekto
K 8
username
V 6
lserni
END

语法很简单:“K”是键,后跟键的长度,“V”是值,后跟值的长度。

在文件的顶部,我手动添加了提供明文密码的八行:

K 8
passtype
V 6
simple
K 8
password
V 20
NotTheActualPassword

(注意:在最新的 Ubuntu 上,passtype 默认为 gpg-agent,所以我的密码会被覆盖。所以我必须将“K 9 V gpg-agent”更改为“K 6 V 简单”)。

现在它可以工作了。

【讨论】:

  • 创建文件是我达成交易的关键。
  • 这对我有用,RabbitVCS 正在为我创建这个文件,我存储了答案中提到的密码
  • 以防万一其他人错过了我所做的相同类型的事情:-) V 中的数字在您的密码前面必须是您密码中的字符数。是的,LSerni 这么说,但我还是错过了第一关。
  • @LSerni:我可以确认这也适用于 svn 版本 1.14.1 (r1886195)
  • @LSerni:我建议更新您的答案并提到~/.subversion/auth/svn.simple 中可能有多个文件
【解决方案3】:

从 SVN 1.12(2019 年 4 月)开始,你基本上不能。来自Release Notes

在类 Unix 系统上,客户端以明文形式存储密码 现在在编译时默认禁用磁盘。密码缓存 基于 Gnome Keyring、Kwallet 或 GPG-Agent 的机制是 建议改为。

此更改不会影响 Windows 或 Mac OS 平台,其中 密码始终以加密形式存储。

所以...除非您编译了自己的 SVN 客户端,否则您现在很可能拥有一个不允许存储明文密码的版本。

顺便说一句,您以前使用的明文密码甚至可能在 Subversion 升级后停止使用。

如果您不想在每个会话中输入一次密码,那么使用gpg-agent 非常容易。只需以gpg-agent --daemon 启动它,输入密码运行您的svn 命令,下一个命令将不再请求它。

【讨论】:

  • 该死...在我输入此内容后,我看到@SRG 的评论具有基本相同的信息。我会在这里保留我的答案,因为大多数人不会在 cmets 中寻找实际答案(我没有)。虽然大多数人不会向下滚动到低分的答案,但...
  • 对社区来说最好的办法是更新@maxschlepzig(最高分)和@davka(接受的答案)以反映新信息。我不会编辑它们,因为这会改变答案的精神,最好让原作者这样做。
【解决方案4】:

我想提交一个详细的答案,以防将来对某人有所帮助。

Subversion 1.6 及更高版本将默认缓存您的用户名和密码,但它不会以明文形式缓存密码,除非您通过命令行或更改 Subversion 配置明确允许。

如果您使用 --username 和 --password 选项签出工作副本,您将看到以下消息:

-----------------------------------------------------------------------
ATTENTION! Your password for authentication realm:

<https://subversion.assembla.com:443> Assembla Restricted Area

can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'~/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? 


如消息中所述,如果您输入“yes”,subversion 只会保存未加密的密码。如果你这样做了,那么你以后在执行 svn 命令时就不需要添加 --username 或 --password 选项了。

但是,如果您根本不想看到此提示,您可以通过更改本地计算机上名为“server”的配置文件来更改 Subversion 客户端的全局配置。它存储在这里:

~/.subversion/server

您需要将以下行添加到“服务器”文件中:

[global]
store-plaintext-passwords = yes

通过此更改,您只需使用 --username 和 --password 选项执行一次 svn 命令。然后 Subversion 将自动保存您的凭据而无需上述提示。

有关禁用有关以纯文本形式缓存密码的警告的更多信息,请参阅Subversion 1.6 Security Improvements 博客文章。

【讨论】:

    【解决方案5】:

    我遇到了同样的问题,并且相信我在 .subversion/servers 和 .subversion/config 中设置了所有适当的配置,尝试删除 .subversion/auth 等,但无济于事。

    我最终通过移动 .subversion 目录(或删除它也可以)并运行 svn co 来保存凭据。我收到以下消息:

    -----------------------------------------------------------------------
    ATTENTION!  Your password for authentication realm:
    
       <http://sweeney:80> Subversion repository
    
    can only be stored to disk unencrypted!  You are advised to configure
    your system so that Subversion can store passwords encrypted, if
    possible.  See the documentation for details.
    
    You can avoid future appearances of this warning by setting the value
    of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
    '/home/davids/.subversion/servers'.
    -----------------------------------------------------------------------
    Store password unencrypted (yes/no)? 
    

    我输入了yes,然后得到了同样的信息。固执地,我再次输入是。现在我的密码似乎被保存了。

    有点令人惊讶的是,查看 .subversion 中的配置,没有一个设置被取消注释;它们都设置为默认值,所以我想我以后必须回答这个警告两次才能为不同的服务器保存密码。

    希望这会有所帮助。

    【讨论】:

    • 谢谢。查看我对这个问题的评论 - 我在其中一个配置文件中找到了解决方案。
    • 谢谢,这对我也有帮助。 (我也将上述所有设置正确,但没有任何成功。)
    【解决方案6】:

    我想我在这里找到了有用的提示: http://svn.haxx.se/users/archive-2013-07/0094.shtml

    据我了解,客户端忘记检查“gpg-agent”当前是否正在运行。

    默认情况下将“passtype”=“gpg-agent”插入~/.subversion/auth/svn.simple/-cache-files。

    这是一个错误!

    作为一种解决方案(并避免手动更改 ~./subversion/auth/svn.simple/ 中的密码缓存文件)删除这些文件(但进行保存副本)。

    将行添加到~/.subversion/config ([auth]-section):

    password-stores=
    

    (考虑:空值!这可以防止客户端选择任何错误的东西并假设“简单”。)

    现在例如试一试:

    svn up
    

    Subversion 现在会警告您保存纯密码。

    如果您对此没有问题,请输入“是”,然后一切都很好。

    之后,Subversion 为特定服务器创建了一个缓存文件,您可以再次删除“密码存储”条目。

    【讨论】:

      【解决方案7】:

      删除旧的存储密码,例如 rm ~/.subversion/auth/svn.simple/*。我已经尝试了所有其他建议,这对我有用。

      【讨论】:

        【解决方案8】:

        感谢您的 cmets,我发现了问题 - 这是服务器文件中的设置(不要存储纯密码)。我想知道为什么配置文件的[auth] 部分存在这种冗余。 SVN book 在谈论存储密码时也没有提到这一点。

        【讨论】:

        • 我需要更改服务器文件#密码/密码缓存参数:store-passwords = yes store-plaintext-passwords = yes
        • 在配置文件中,有一行:### 此文件中本节的其余部分已被弃用。 ### 'store-passwords' 和 'store-auth-creds' 现在都可以在配置目录的 'servers' 文件中指定###。 ### 本节中指定的任何内容都会被“服务器”文件中指定的设置### 覆盖。
        【解决方案9】:

        无论我做了什么,都没有对我有用。我在谷歌中检查了所有可能的选项、配置文件和数百页关于这个问题的信息。最终我放弃了,只是把它放到我的 .bashrc 中

        alias svn='svn --password <mypassword>'
        

        【讨论】:

          【解决方案10】:

          我需要对服务器文件进行更改以使其适合我

          # Password / passphrase caching parameters:
          store-passwords = yes
          store-plaintext-passwords = yes
          

          【讨论】:

            【解决方案11】:

            即使没有启动 X,您也可以使用 gnome-keyring。 你应该运行

            export `gnome-keyring-daemon`
            

            登录时

            kill $GNOME_KEYRING_PID
            

            注销前。

            然后您可以使用keyring_tool 命令行实用程序。

            【讨论】:

              【解决方案12】:

              在带有 slikSVN 的 Windows 上,我遇到了同样的问题,但只是其中一个项目,所以我进入 %AppData%\Roaming\Subversion\auth\svn.simple 并删除了包含该项目信息的文件。

              我输入的下一个 SVN 命令要求输入密码并再次创建文件,现在它运行良好。

              也许我更改了配置和服务器文件的事实也有帮助,但在我删除该文件之前它无法正常工作(并且在服务器上出现密码问题并且管理员重置权限之前,它也可以使用以前的配置) .

              【讨论】:

              • 更改配置和服务器文件并没有解决我的问题。但是删除 svn.simple 文件夹解决了它(可能与新的配置和服务器文件一起)
              【解决方案13】:

              一个对我有用的解决方案(即使不是更好的解决方案,至少让我摆脱困境),它是授予我的本地用户对 ~/.subversion 目录和子目录的所有权限。然后我可以在不提示用户名和密码的情况下快速进行颠覆操作。

              【讨论】:

                【解决方案14】:

                如果您尝试在现有工作副本上重置身份验证,我建议您在完成上述所有更改后签出新副本。当我尝试使用 maven-release-plugin 发布项目时,这是唯一对我有用的东西(它使用存储的 svn 凭据来自动提交标签等......)

                【讨论】:

                  【解决方案15】:

                  请注意,在 svn co/up 和 svn log 之间存在与密码存储相关的不同行为!

                  我尝试了上面的所有提示,并且总是尝试使用“svn log”进行验证——svn 命令总是一次又一次地询问我的密码,无论 store-plaintext-passwords 是否正确设置为询问或是。但是当我进行新的结帐或更新时,我突然有了正确的行为并且我的密码被保存了

                  我认为这是一个颠覆性的错误,可以为不同的命令对密码存储进行不同的处理——至少我之前没有读到过。

                  【讨论】:

                    【解决方案16】:

                    出于某种奇怪的原因,我的 .subversion 文件夹不属于我,并且 SVN 不会保存密码证书。

                    我刚刚做了一个sudo chown -R me ~/.subversion,现在一切正常!

                    【讨论】:

                    • 我遇到了类似的问题(svn不记得密码,每次都提示),我做了rm -rf ~/.subversion,(如果与本地不同,您必须重新输入所有密码甚至用户名用户)。现在它记住了我的凭据。如果有的话,调整 /etc/subversion/servers 和 ...config,而不是 ~/.subversion
                    【解决方案17】:

                    我在更改密码后遇到了此类问题,并通过删除 SVN 配置(因此从头开始重新创建)解决了这个问题。

                    【讨论】:

                      【解决方案18】:

                      从以下目录中删除文件:

                      对于 Windows:

                      例如:

                      C:\Users\abcd.xyz\AppData\Roaming\Subversion\auth\svn.simple

                      abcd.xyz-->用户名

                      注意:删除所有文件。这些文件包含有关结帐的元数据。下次您存储密码时,它会自动在此处创建一个文件。

                      从您的 STS/Eclipse 安装中删除 .keyring 文件。停止 Eclipse 并删除文件。

                      例如:

                      D:\可执行文件\新建 STS\STS-3.5.0-e4.3.2-win64\configuration\org.eclipse.core.runtime -->.keyring

                      【讨论】:

                        【解决方案19】:

                        根据我在之前的答案中读到的内容,这些都不起作用。我发现对我有用的可能是多种事物的组合,或者是打开钥匙串应用程序的最后一步,找到有问题的钥匙。

                        右键单击并转到“获取信息”。单击顶部的访问控制部分。然后单击“允许所有应用程序访问此项目”。虽然这可能会做一些意想不到的事情。

                        【讨论】:

                          【解决方案20】:

                          能够在 macOS、vscode 中解决此问题,

                          svn 版本 1.14.1

                          更改 $HOME/.subversion/servers:

                          [global]
                          store-passwords = yes
                          

                          更改 $HOME/.subversion/config 包含:

                          [auth]
                          password-stores = keychain
                          

                          转到~/.subversion/auth/svn.simple 查找并删除包含我的 svn 站点的配置文件。

                          打开钥匙串访问工具删除相关的钥匙。

                          转到我的项目文件夹,运行svn up --username xxxx --password xxxx 重新打开 VSCode。会好的。

                          【讨论】:

                            猜你喜欢
                            • 2013-03-29
                            • 1970-01-01
                            • 2021-11-28
                            • 2023-04-04
                            • 1970-01-01
                            • 2010-12-25
                            • 1970-01-01
                            • 2012-05-22
                            • 1970-01-01
                            相关资源
                            最近更新 更多