【问题标题】:WebDeploy (401) Unauthorized errorWebDeploy (401) 未经授权的错误
【发布时间】:2011-01-26 16:27:20
【问题描述】:

在尝试使用不是目标服务器上的本地管理员的 Windows 用户远程部署应用程序时,我使用 NTLM 身份验证从 MsDeploy 收到未经授权的错误。我在目标框中的管理服务委派中设置了规则,并检查了所有提供者。在此规则下,我添加了 2 个具有允许权限的用户('*',以及我正在执行远程部署的 windows 用户)。此外,我已在我尝试部署的站点上授予 Windows 用户权限。如果我让 Windows 用户成为目标框上的本地管理员并设置“允许管理员绕过规则”,则部署工作正常。如果 windows 用户不是本地管理员,我会收到以下错误:

Web 部署任务失败。(无法联系远程代理 (URL http://xxxxxxxx/MSDEPLOYAGENTSERVICE)。请确保已在目标计算机上安装并启动远程代理服务。)确保站点名称、用户名和密码为正确的。如果问题仍未解决,请联系您的本地或服务器管理员。错误详情:无法联系远程代理 (URL http://xxxxx/MSDEPLOYAGENTSERVICE)。确保在目标计算机上安装并启动了远程代理服务。收到了不受支持的响应。响应标头“MSDeploy.Response”为“V1”,但应为“v1”。远程服务器返回错误:(401) Unauthorized。在 Microsoft.Web.Publishing.targets(3588, 5)

【问题讨论】:

标签: iis msbuild msdeploy webdeploy


【解决方案1】:

如果您将委派配置为“允许管理员绕过规则”并且 msdeploy 命令成功,那么您正在通过 WMSvc,它正在让您通过。否则,从响应看来,WMSvc 正在拒绝您,而您正在回退到 Web Deloy 代理。

将以下 reg 值设置/添加到 WMSvc reg key:

reg add HKLM\Software\Microsoft\WebManagement\Server /v WindowsAuthenticationEnabled /t REG_DWORD /d 1

回收 WMSvc:

net stop wmsvc & net start wmsvc

再试一次。如果不成功,您可以发布您的 msdeploy 命令行。

【讨论】:

  • 添加这个注册表设置似乎已经解决了这个问题。你能解释一下这个设置是什么,或者指向我的 MSDN 吗?
  • 您也可以从 UI 配置此选项。如果您进入 InetMgr.exe 中的“管理服务”并检查“Windows 凭据”,则该注册表值将设置为 1,而 RequiresWindowsCredentials 将设置为 0。如果您要检查“Windows 凭据或 IIS Managert 凭据”,则两个值都将设置为 1。
  • 基本上,在通过 Web Deploy 使用 Web 管理服务 (WmSvc) 之前,您需要确保它在服务器上已正确配置。使用 UI 是解决此问题的最佳方式。
  • 只是给手动添加此 reg 密钥的任何人的注意事项 - 从我刚刚浪费了 3 个小时的时间来对部署进行故障排除并确保您不会不小心将尾随空格粘贴到密钥名称中!嘎。
  • 你是最棒的!!我刚刚花了几个小时试图找出愚蠢的 401 授权错误。
【解决方案2】:

作为构建过程的一部分,我们一直在部署一台机器。由于没有明显的原因,部署停止工作,我们无法再远程访问任何管理共享(C$、ADMIN$ 等)。我们找到了管理共享的修复程序,它也修复了部署问题。

我们按照这篇知识库文章中的步骤重新启用了管理共享(仍然不知道它们为什么突然停止工作)。

http://support.microsoft.com/kb/947232

在我们这样做之后,msdeploy 突然又开始工作了。我认为 msdeploy 根本没有使用管理共享。我什至不肯定这两者是否相关,但我想我会把它扔在那里以防它解决其他人的问题。

【讨论】:

【解决方案3】:

我终于能够使用 NTLM 运行我的自动构建和部署。我只是想总结一下它需要做些什么,以防它对任何人都有帮助。这是 IIS 7.5。

  1. 设置注册表设置并重新启动 Web 管理服务 (WMSVC):

    reg add HKLM\Software\Microsoft\WebManagement\Server /v WindowsAuthenticationEnabled /t REG_DWORD /d 1

  2. 授予用户在网站目录中运行 TFS 构建服务的权限。

  3. 这是我使用的 MSBuild 参数。用你的名字替换各种名字。我使用的是 DEV 和 Any CPU。我还需要允许一个不受信任的证书。

    /m /p:PublishProfile=DEV /p:Configuration=DEV /p:Platform="Any CPU" /p:DeployOnBuild=true /p:AllowUntrustedCertificate=true /p:authType=NTLM

  4. 在选择目标网站的 IIS 管理器中,打开 IIS 管理器权限并允许用户运行 TFS 构建服务。

跟踪对于诊断问题非常有帮助。您可以在 IIS 管理器的管理服务委派中打开跟踪。最初我在 IIS 管理器中看不到管理服务委派。为了展示,我必须从“添加程序”中“更改”Web 部署,以便安装管理服务委派。看起来它已经安装了,但是我重置了下拉列表以安装到我的计算机上并完成了安装。然后它出现在 IIS 管理器中。

【讨论】:

    【解决方案4】:

    不确定确切原因,但也许可以帮助您找到自己的方式。

    WebDeploy 根据远程服务器的配置使用两个入口点,即其运行的是 IIS6 还是 IIS7。

    IIS 7 使用 IIS 部署处理程序,它由 Web 管理服务管理并允许 msdeploy 直接配置 IIS。所有“管理服务委托”等设置都与此设置相关。

    但是,IIS 6 没有 Web 管理服务,因此处理程序将无法工作。对于 IIS6 目标,使用称为 MS Deploy Agent Service 的服务。

    奇怪的是,您的设置表明您使用的是 IIS 7,因为您可以设置委托设置等。但是,该 url,“/MSDEPLOYAGENTSERVICE”表明您的机器正在尝试使用该服务......几乎好像它认为它的 IIS 6。该服务需要管理员访问权限,这就是您收到该错误的原因。

    根据错误,您似乎是从 MSbuild 调用它,可能直接从 Visual Studio 调用。您可能需要查看您提供的设置,看看是否有任何内容导致此路径和/或服务器选择。

    还要确保 Web 管理服务正在远程计算机上运行。

    基本上,您希望看到它对不同的网址 http:///msdeploy.axd(如果我没记错的话)进行部署调用以正确调用处理程序。

    【讨论】:

      【解决方案5】:

      这占用了我太多时间。我已经让 Web Deploy 为我的其他站点工作。我决定向我的服务器添加一个新网站,并尝试部署到它(但由于过度复制/粘贴错误,意外留下了相同的“站点/应用程序”名称)。发布成功,但是当我意识到我发布到错误的站点(而不是新站点)时,我更改了站点名称并尝试重新部署,但我一直收到此错误。我在 IIS 端尝试了一切。最后,我完全关闭了我的 Visual Studio 2010 实例。重新打开它,再次尝试发布,它成功了!

      如有疑问,请问问自己:“您是否尝试过将其关闭并再次打开?”
      我意识到这个建议不会帮助每个人解决这个模棱两可的错误 - 只是选择了几个。

      【讨论】:

        【解决方案6】:

        如果你的用户是管理员,但你仍然得到

        ERROR_USER_IS_NOT_ADMIN

        确保您使用的是完全限定的用户名。

        MyMachineName\MyWebDeployUser

        【讨论】:

        • 或域名\MyWebDeployUser。
        【解决方案7】:

        昨天我能够部署得很好,今天有这个完全相同的错误消息。经过一两个小时的故障排除后,我最终从我的用户名中删除了域。在它是 DOMAIN\username 之前,我将其更改为 [username],瞧,它又开始工作了。我知道这不是一个很好的答案,但也许它会帮助遇到它的其他人。

        【讨论】:

        • 对我来说正好相反...我必须在我的用户名前面添加我的域名,像这样:DOMAIN\username
        【解决方案8】:

        昨天,在我们运行 Windows Server 2003 的域控制器之一上安装了 MS15-025MS15-027 的补丁后,当使用当前 Windows 用户的身份(它使用显式凭据)时,Web Deploy 停止为我们工作。

        我们检查了有关 Web 部署的所有建议,但无法解决 HTTP 401.2 错误。

        现在,Microsoft 重新发布了专门针对 Windows Server 2003 的两个公告的补丁(KB3033395-v2 和 KB3002657-v2)。安装更新的补丁并启动域控制器后,它立即再次工作。我们甚至不必重新启动 Web 服务器上的任何服务。

        没有指向此的事件日志条目,只是由于时间关系而变得明显。

        【讨论】:

          【解决方案9】:

          还有另一种可能:由于使用 web deploy 进行部署的尝试失败次数过多,您的帐户已被锁定。重置您的帐户或让您的系统管理员为您执行此操作。非常沮丧。

          【讨论】:

            【解决方案10】:

            我的问题是网络服务是 Web 部署代理服务 中的登录帐户,并且该帐户没有足够的权限来更改或读取 IIS 文件...

            要解决您的问题,只需执行以下步骤:

            打开服务面板 (services.msc)
            找到 Web Deploy Agent Service 和 双击打开 Web Deploy Agent Service 属性... 在“登录”选项卡中,将“登录身份”更改为管理员帐户...

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-04-19
              • 1970-01-01
              • 1970-01-01
              • 2017-12-20
              • 2015-10-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多