在 SVN 中如何覆盖自动 Windows 域身份验证

Posted

技术标签:

【中文标题】在 SVN 中如何覆盖自动 Windows 域身份验证【英文标题】:In SVN how do I override automatic Windows domain authentication 【发布时间】:2013-11-17 01:35:34 【问题描述】:

我有一个不属于 Windows 域的构建服务器,它试图通过 apache 连接到运行 HTTPS 的 VisualSVN 服务器,并通过 Active Directory 进行域登录。当我尝试使用指定域用户名连接到服务器时,我观察到客户端挂起:

svn ls --username=domainuser https://subversion.mydomain/svn/repo1/

服务器上的日志使用构建机器的登录名和域名字段中的构建机器的主机名显示 Windows 身份验证失败。命令行中提供的用户名将被完全忽略。

SVN 客户端:TortoiseSVN 命令行工具:svn,版本 1.8.1 (r1503906)

在单独的机器上(在域上) - 我发现如果我使用 cygwin svn 代替 --username 将不会被忽略。

【问题讨论】:

当你指定你的域用户名时,你是否以这种格式指定它:svn ls --username username@domainxx.com 我尝试了多种组合但没有任何变化 - 根本问题是 --username 字段被忽略了。我假设需要@domain 将取决于服务器配置。通过我在下面的修复,服务器不需要指定域(它只针对一个域进行验证)。 【参考方案1】:

我找到的解决方案是禁用http-auth-type 'negotiate'。这可以防止自动共享 Windows 凭据。

我使用命令行覆盖验证了这一点,它在命令行上要求用户输入密码:

svn ls --username=domainuser --config-option servers:global:http-auth-types=basic;digest https://subversion.mydomain/svn/repo1/
Authentication realm: <https://subversion.mydomain/svn/repo1/> VisualSVN Server
Password for 'domainuser': 

(Cygwin 用户注意事项: 如果您在 Windows 下通过 Cygwin 使用 SVN,则需要在命令中添加引号,如下所示:$ svn ls --username=domainuser --config-option "servers:global:http-auth-types=basic;digest" https://subversion.mydomain/svn/repo1/ -- 否则分号将被视为命令分隔符。)

要更永久地配置它,您可以为所有匹配的服务器创建一个servers 配置文件条目。对于 Win7,C:\Users\&lt;User&gt;\AppData\Roaming\Subversion\servers

[groups]
mydomain = *.mydomain

[mydomain]
http-auth-types=basic;digest

【讨论】:

一点注意:更改“服务器”文件后,您必须重新启动适当的应用程序才能捕获新设置。就我而言,它是 VS2015(AnkhSvn 插件)。但是,IntelliJ Idea 会“即时”捕捉新设置。【参考方案2】:

我建议不要在客户端的配置中禁用协商,而是使用Windows Credential Manager 来存储其他帐户的单点登录凭据。

以下说明显示如何将其他域凭据以访问 VisualSVN 服务器放入 Windows 凭据管理器:

    开始 |控制面板 |凭证管理器

    单击“添加 Windows 凭据”

    As'Internet 或网络地址' 输入 VisualSVN 的 FQDN 服务器的机器,

    作为'用户名'输入用户帐户的&lt;DOMAIN&gt;\&lt;username&gt; 存在于域中并具有对 VisualSVN 服务器的访问权限,

    填写密码字段并单击确定,

    完成上述步骤后,验证您是否可以在所选用户帐户下向 VisualSVN Server 进行身份验证。

【讨论】:

谢谢,假设我需要为不同的任务(例如构建不同的项目)单独登录,svn 的 --username 参数可以用来区分多个保存的凭据吗?它似乎被忽略了。 @bahrep 如果凭证管理器被禁用,是否有任何解决方法? @bahrep 很遗憾没有......它说明我不允许创建新条目 当主机名有另一个凭据条目时,即使在 svn http URL 连接中使用 FQDN,Windows 似乎也无法正确识别 FQDN

以上是关于在 SVN 中如何覆盖自动 Windows 域身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何以与 Windows 服务不同的用户身份运行进程

svn,在更新时,如何实现覆盖原有的文件,而不是在文件中多了几道杠,和很多重复代码

使用 git-svn 创建上游分支时无法进行身份验证

如何在局域网内创建windows 域

如何自动更新SVN项目

SVN更新代码的时候会覆盖本地文件吗?