401使用非管理员用户的WebDeploy未经授权的错误

时间:2014-03-26 15:46:58

标签: iis-7 msdeploy webdeploy

< TLDR>
是否可以使用ms web deploy将命令行远程主机部署到非管理员用户?
< / TLDR>

我已经遵循了Microsoft Installing and Configuring Web Deploy指南中的每一点。我的目标是能够与IIS用户/非管理员用户进行远程Web部署。

完成为非管理员部署安装和配置Web部署中所述的所有步骤后,我收到以下日志消息(表示一切正常):

Publish enabled for 'deploy_user'
Granted 'deploy_user' full control on 'C:\inetpub\wwwroot'
Successfully created settings file 'C:\Users\...\Desktop\deploy_user_Default Web Site.PublishSettings'

接下来,当我从本地计算机尝试运行以下命令时:

.\my_deploy_package.cmd /M:https://machine_name:8172/msdeploy.axd -allowUntrusted /U:deploy_user /P:deploy_password /A:Basic /T

我收到一条错误消息:错误:远程服务器返回错误:(401)未经授权。

如果我在目标计算机上进入事件查看器>自定义视图> Administratove Events,我看到此消息出现“匹配”错误:

  

IISWMSVC_AUTHORIZATION_SERVER_NOT_ALLOWED

     

只允许Windows管理员使用服务器进行连接   连接。其他用户应使用“连接到站点”或   应用程序的任务是能够连接。

     

流程:WMSvc User = deploy_user

此错误与this question中描述的完全相同。 accepted answer表明我已经做的就是正确的方法。

我尝试了几种建议的解决方法,例如this,但似乎没有任何帮助。管理服务设置为允许远程连接(Windows和IIS管理器),并且我已经为内置Windows用户(非管理员)和IIS管理员用户运行配置,但仍然是相同的错误。但是,只要我与管理员用户一起运行deploy命令,它就会成功。

am 允许通过IIS gui与我的非管理员deploy_user用户远程连接(在IIS中:连接到站点> [服务器URL] / [站点名称]> deploy_user / deploy_password ),表示已配置必要的权限和规则。但是,当我尝试使用相同的用户运行部署脚本命令行时,它失败了。

如果错误消息指示实际 ,则任何非管理员用户 IIS管理器,那么从命令行/构建服务器进行这样的部署的推荐方法是什么?我真的不想在构建服务器的配置中以明文形式输入管理员用户的用户名/密码......

我发现有一个选项是,如果你的构建服务器和你尝试部署的机器有一个共同的Active Directory(或其他共享用户的方式),你可以跳过/A:Basic标志并完全省略用户名和密码。您必须确保运行部署的用户也具有部署目标的管理员权限。但是,在我们的一个案例中,构建服务器和部署目标没有具有共同的用户群,因此这不是一个选项,我们将以明文形式返回用户名/密码 - 这根本不可取。

4 个答案:

答案 0 :(得分:21)

由于用户仅在站点级别而不是IIS根级别具有管理员权限,因此您需要添加站点名称。

而不是https://machine_name:8172/msdeploy.axd,您需要https://machine_name:8172/msdeploy.axd?site=[MySiteName]

如果未添加,msdeploy会尝试通过IIS的根目录访问该站点。使用添加的参数可以直接访问站点,并且特定网站上的管理员权限就足够了。

答案 1 :(得分:4)

尝试直接从命令行

运行它
msdeploy.exe
  -source:package='…\DemoProject.zip'
  -dest:auto,
        computerName='https://TESTWEB1:8172/MSDeploy.axd?site=DemoSite',
        userName='FABRIKAM\User',
        password='Pa$$w0rd',
        authtype='Basic'
  -verb:sync
  -setParamFile:"…\DemoProject.SetParameters.xml"  
  -allowUntrusted

DemoProject.zip替换为您的软件包TESTWEB1与您的服务器。同时更改username, password, DemoSiteDemoProject.SetParameters.xml

引自here

答案 2 :(得分:2)

假设您没有使用MSI进行安装,并且您已正确安装和配置下面引用的这些步骤,请确保在服务器上正确配置了WMSvc。看看这个接受的答案是否可以帮助您:https://stackoverflow.com/a/4834248/463478

  

2.如果未安装Web管理服务,MSI将不会安装Web管理服务处理程序组件; 处理程序   组件是非管理员部署所必需的。视窗   应首先安装组件IIS,包括管理服务   使处理程序组件能够安装。

     

3.如果未安装PowerShell v2,MSI将不会将Web管理服务配置为允许非管理员部署。 :此   设置步骤包括在IIS服务器中创建委派规则   Administration.config文件,允许非管理员用户使用   Web部署。 PowerShell v2内置在Windows Server 2008 R2上,但是   可能需要Windows Server 2008的Windows Update。或者   安装后可以手动添加委派规则

答案 3 :(得分:0)

这篇文章确实帮助了我两件事。

  1. 指定网站名称
  2. 将身份验证类型设置为基本。
  3. 我的网络应用程序名称中也有空格,当我尝试指定服务网址时,我一直收到错误https://machine_name:8172/msdeploy.axd?site=my%20web%20app

    我能够使用额外的msdeploy.exe标志"-setParam:name='IIS Web Application Name',value='my web app'"解析此设置的站点名称

    我的工作命令是:

      

    my_deploy_package.cmd / M:https://machine_name:8172/msdeploy.axd / U:deploy_user / P:deploy_password / A:basic -allowUntrusted “ - setParam:name ='IIS Web Application Name' ,value ='我的网络应用'“