msdeploy错误ERROR_USER_UNAUTHORIZED:Web部署任务失败

时间:2018-01-03 10:31:34

标签: msbuild tfs2015 msdeploy microsoft-web-deploy

Web部署任务失败。错误ERROR_USER_UNAUTHORIZED

我们正在使用Tfs Build Automation和msdeploy在远程计算机上发布Web应用程序。

在“Visual Studio Build”步骤中,我们在“MSBuild Arguments”上设置此参数: / P:DeployOnBuild = TRUE; PublishProfile =我的资料; AllowUntrustedCertificate = TRUE;用户名= $(用户名);密码= $(密码)

在编译之后我们得到了这个错误:

C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ Web \ Microsoft.Web.Publishing.targets(4276,5):错误ERROR_USER_UNAUTHORIZED:Web部署任务失败。 (使用Web管理服务连接到远程计算机(“MySERVER”),但无法授权。确保使用正确的用户名和密码,您要连接的站点存在,并且凭据代表有权访问该网站的用户。请访问:http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED了解详情。)

我确信用户名和密码是正确的,用户是服务器上的管理员(MySERVER)。

我检查了IIS上的管理服务日志,发现了一些重要的事情: 发送代理程序的用户名(tfsadmin)发送到IIS上的部署,而不是我在构建变量中设置的用户/传递。

字段:日期时间s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent)cs(Referer)sc-status sc-substatus sc- win32-status time-taken

2018-01-03 09:29:02 MYSERVERIP HEAD /msdeploy.axd site = MySiteName 8172 - MyBuildServerIP - - 401 2 5 1322 2018-01-03 09:29:02 MYSERVERIP HEAD /msdeploy.axd site = MySiteName 8172 tfsadmin MyBuildServerIP - - 401 1 1326 86

更新1: 我在msBuildArgs中添加了更多信息,如下面的构建日志中所示,密码为空(而不是********)!

WebDeploy版本:3.6 TFS版本:2015.1 目标计算机(MySERVER):Windows 2012 R2 IIS版本:8.5 “tfsadmin”用户具有目标IIS站点上的目标服务器(MyServer)和IIS管理器权限的本地管理员。

构建日志:

2018-01-06T06:37:19.9298797Z Starting task: Build solution $/MyProject/MySolution.sln
2018-01-06T06:37:20.0529203Z Executing the powershell script: D:\Agents\Agent-01\tasks\VSBuild\1.0.16\VSBuild.ps1
2018-01-06T06:37:20.3760645Z ##[debug]Entering script VSBuild.ps1
2018-01-06T06:37:20.3790648Z ##[debug]vsLocation = 
2018-01-06T06:37:20.3800653Z ##[debug]vsVersion = 14.0
2018-01-06T06:37:20.3810663Z ##[debug]msBuildLocation = 
2018-01-06T06:37:20.3820668Z ##[debug]msBuildVersion = 
2018-01-06T06:37:20.3830692Z ##[debug]msBuildArchitecture = x64
2018-01-06T06:37:20.3840679Z ##[debug]msBuildArgs = /p:DeployOnBuild=true;PublishProfile=myProfile;AllowUntrustedCertificate=true;UserName=tfsadmin;Password=;Pass2=********
2018-01-06T06:37:20.3840679Z ##[debug]solution = D:\Agents\Agent-01\_work\2\s\MyProject\MySolution.sln
2018-01-06T06:37:20.3860721Z ##[debug]platform = 
2018-01-06T06:37:20.3870700Z ##[debug]configuration = 
2018-01-06T06:37:20.3880727Z ##[debug]clean = true
2018-01-06T06:37:20.3890697Z ##[debug]restoreNugetPackages = true
2018-01-06T06:37:20.3890697Z ##[debug]logProjectEvents = true
2018-01-06T06:37:20.4010877Z ##[debug]Loading module from path 'D:\Agents\Agent-01\agent\worker\Modules\Microsoft.TeamFoundation.DistributedTask.Task.Internal\Microsoft.TeamFoundation.DistributedTask.Task.Internal.dll'.
...

有人能帮助我吗?

3 个答案:

答案 0 :(得分:0)

您说错了用户名和密码最终用于验证请求。运行命令net helpmsg 1326(1326是您提供的日志条目中的sc-win32-status值)会产生&#34; 用户名或密码不正确。&#34; < / p>

同样有趣的是之前记录的请求/响应。 401的子状态值2表示&#34; Access由于服务器配置有利于备用身份验证方法而被拒绝。&#34;根据{{​​3}}。而net helpmsg 1322会产生&#34; 不允许此操作,因为它可能导致管理帐户被禁用,删除或无法登录。&#34;

  1. 查看(或重新审核)TechNet
  2. 上的说明
  3. 如果您的部署仍无效,请查看https://docs.microsoft.com/en-us/iis/publish/using-web-deploy/configure-the-web-deployment-handler

答案 1 :(得分:0)

使用命令行从VS部署将使用您提供的用户名和密码。但是,从TFS部署将使用构建代理。因此,第一件事是构建过程的服务帐户应该具有访问远程服务器的正确权限。

尝试将构建服务帐户 local administrator权限和 IIS Manager Permissionson 提供给远程服务器上的网站范围(“MySERVER”) 。然后将username参数设置为""(空引号),并省略密码字段。

参考:Build only works with username and password in msbuild arguments

  

由于许多不同的原因,此错误代码可能会浮出水面。   它通常表示身份验证或授权问题,以及   可能因为以下任何原因而发生:

     

如果使用Web管理服务进行连接:

     
      
  • 验证用户名和密码是否正确
  •   
  • 验证网站是否存在
  •   
  • 验证用户是否具有该站点范围的IIS管理员权限
  •   
     

如果使用Remote Agent Service进行连接:

     
      
  • 验证用户名和密码是否正确
  •   
  • 确认您指定的用户帐户是远程计算机上Administrators组的成员。注意:因为一个bug   在Web Deploy 2.0中,用户必须是内置管理员   或Domain Administrators安全组的成员。试图来   与任何其他用户帐户同步,即使是管理员,
      会看到此错误代码。验证网站是否存在
  •   

参考:ERROR_USER_UNAUTHORIZED

<强>更新

默认情况下,Web Deploy将使用HTTP基本身份验证进行连接。 使用HTTP基本身份验证时,必须提供特定凭据, e.g。

msdeploy.exe -verb:dump -source:apphostconfig,wmsvc=demo-host,authType:basic,username=someuser,password=somepassword

在您的方案中,您可以尝试将AuthType设置为NTLM,然后再次尝试。

只需尝试将行<AuthType>NTLM</AuthType>添加到发布.pubxml文件即可。

答案 2 :(得分:0)

尝试一下:

  • 在服务器上转到“计算机管理”
  • 从左窗格中选择“本地用户和组”
  • 转到用户找到tfsadmin用户
  • 右键单击它,然后单击“设置密码”
  • 提供您的现有密码(无论密码是什么)

这似乎不必要,但对我有用。我希望有人可以解释“为什么”。