Msdeploy错误ERROR_USER_UNAUTHORIZED:Web部署任务失败。

3

Web部署任务失败。错误ERROR_USER_UNAUTHORIZED。

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

在“Visual Studio Build”步骤中,我们在“MSBuild Arguments”中设置以下参数: /p:DeployOnBuild=true;PublishProfile=myProfile;AllowUntrustedCertificate=true;UserName=$(UserName);Password=$(Password)

排队构建后,我们收到以下错误:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4276,5): Error ERROR_USER_UNAUTHORIZED: Web deployment task failed. (Connected to the remote computer ("MySERVER") using the Web Management Service, but could not authorize. Make sure that you are using the correct user name and password, that the site you are connecting to exists, and that the credentials represent a user who has permissions to access the site. Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.)

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

我检查了IIS上的管理服务日志,并发现了一些重要信息:在部署到IIS时,构建代理的用户名(tfsadmin)被发送,而不是我在构建变量中设置的用户名/密码。

字段:日期 时间 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”用户在目标服务器(MyServer)上具有本地管理员权限,并且在目标IIS站点上具有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'.
...
有人可以帮助我吗?

你能否在开发机上通过设置命令行中的MSBuild参数成功部署Web应用程序? - Andy Li-MSFT
是的,我可以在开发机上使用MSBuild进行部署。 - Omid Shariati
3个回答

1

您说得对,最终使用了错误的用户名和密码来进行身份验证。运行命令net helpmsg 1326(1326是您提供的日志条目中的sc-win32-status值)会返回“用户名或密码不正确。

还有一个有趣的请求/响应记录在此之前。401的子状态值2表示“由于服务器配置偏向于备用身份验证方法,因此拒绝访问。”,根据TechNet。而net helpmsg 1322则返回“此操作被禁止,因为它可能导致管理帐户被禁用、删除或无法登录。

  1. 请重新查看https://learn.microsoft.com/zh-cn/iis/publish/using-web-deploy/configure-the-web-deployment-handler上的指示。
  2. 如果您的部署仍然无法正常工作,请查看Microsoft 的使用 Web Deploy 解决常见问题

谢谢Weir,我知道错误的内容,但我的问题是为什么它使用build-agent-service的用户名/密码,而不是我在构建变量中设置的用户名/密码。 - Omid Shariati

1

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

尝试为构建服务帐户 本地管理员 权限和IIS管理器权限分配到远程服务器(“MySERVER”)上的站点范围。然后将用户名参数设置为“”(空引号),省略密码字段。

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

这个错误代码可能由许多不同的原因引起。通常表示身份验证或授权问题,并且可能由以下任何原因之一引起:
如果使用 Web 管理服务连接: - 验证用户名和密码是否正确 - 验证站点是否存在 - 验证用户是否具有对站点范围的 IIS 管理器权限
如果使用远程代理服务连接: - 验证用户名和密码是否正确 - 验证您指定的用户帐户是否是远程计算机上管理员组的成员。注意:由于 Web Deploy 2.0 中的一个错误,用户必须是内置管理员或域管理员安全组的成员。尝试与任何其他用户帐户同步,即使它是管理员,也会看到此错误代码。验证站点是否存在 参考: ERROR_USER_UNAUTHORIZED

更新:

默认情况下,Web Deploy将使用HTTP Basic身份验证进行连接。 使用HTTP Basic身份验证时,必须提供特定的凭据,例如:

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

在您的情况下,您可以尝试将AuthType设置为NTLM,然后再次尝试。
只需尝试将<AuthType>NTLM</AuthType>行添加到发布的.pubxml文件中即可。

谢谢Andy,服务账户(tfsadmin)在远程机器(MyServer)上拥有本地管理员权限和目标站点的IIS管理权限。我将用户名参数设置为“”,但问题仍然存在,但出现了新错误:Web部署任务失败。(指定的凭据无法与身份验证方案“Basic”一起使用。) 指定的凭据无法与身份验证方案“Basic”一起使用。 默认凭据不能为基本身份验证方案提供。 参数名称:authType - Omid Shariati
1
@OmidShariati 只需尝试将以下行添加到.pubxml文件中。<AuthType>NTLM</AuthType>。请参阅更新的答案。 - Andy Li-MSFT
@OmidShariati 你解决了这个问题吗?有任何更新吗? - Andy Li-MSFT
1
感谢 @andy-li-msft,在这段时间里,我们的目标环境发生了变化,我无法再次测试此问题。目标环境与我们的构建/TFS服务器不在同一个域中,所以会出现此问题。几周后我们可以再次测试它。 - Omid Shariati

0

请尝试以下步骤:

  • 在您的服务器上打开计算机管理
  • 从左侧面板选择本地用户和组
  • 进入用户查找 tfsadmin 用户
  • 右键单击它,然后单击设置密码
  • 输入您的现有密码(无论是什么)

这似乎是不必要的,但对我很有效。希望有人能解释“为什么”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接