使用非管理员用户的 WebDeploy 出现 401 未经授权的错误
Posted
技术标签:
【中文标题】使用非管理员用户的 WebDeploy 出现 401 未经授权的错误【英文标题】:401 Unauthorized error with WebDeploy using non-administrator user 【发布时间】:2014-03-26 15:46:57 【问题描述】:我已遵循 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)未授权。
如果我在目标机器上进入事件查看器 > 自定义视图 > 管理事件,我会看到一条“匹配”错误消息:
IISWMSVC_AUTHORIZATION_SERVER_NOT_ALLOWED
仅允许 Windows 管理员使用服务器进行连接 联系。其他用户应使用“连接到站点或 应用程序的任务才能连接。
进程:WMSvc 用户=deploy_user
此错误与this question 中描述的完全相同。而accepted answer 表明我已经做的是正确的方法。
我尝试了几种建议的解决方法,例如this,但似乎没有任何帮助。管理服务设置为允许远程连接(Windows 和 IIS 管理器),我已经为内置 Windows 用户(非管理员)和 IIS 管理器用户运行了配置,但仍然出现相同的错误。但是,只要我使用管理员用户运行部署命令,它就会成功。
我 am 允许通过 IIS gui 与我的非管理员 deploy_user 用户远程连接(在 IIS 中:Connect to Site > [server url]/[site name] > deploy_user/ deploy_password),表示配置了必要的权限和规则。但是,当我尝试使用同一用户运行部署脚本命令行时,它会失败。
如果它实际上 是 如错误消息所示,则任何非管理员用户都可以仅通过 连接到站点或应用程序 IIS 管理器,那么从命令行/构建服务器进行这样的部署的推荐方法是什么?我真的不想在构建服务器的配置中以明文形式输入管理员用户的用户名/密码...
我发现一个可行的选项是,如果您的构建服务器和您尝试部署的机器具有共同的 Active Directory(或其他共享用户的方式),您可以跳过 /A:Basic
标志并离开完全去掉用户名和密码。您只需确保运行部署的用户也对部署目标具有管理员权限。然而,在我们的一种情况下,构建服务器和部署目标没有有一个共同的用户群,所以这不是一个选项,我们回到明文的用户名/密码 -这根本不可取。
【问题讨论】:
也许这有帮助? ***.com/questions/2874939/… @EladLachmi:您链接到的帖子中建议的内容正是我所做的(请参阅我的问题中第三段之后的输出 “按照所述执行所有步骤后在..."). 对,现在我明白了。对不起。 您可以尝试在https://machine_name:8172/msdeploy.axd
后面添加站点名称吗?示例:https://machine_name:8172/msdeploy.axd?site=[MySiteName]
@EladLachmi:哦,天哪,这确实有效!我从来没有想过在机器参数中指定站点名称——因为它已经在参数文件中指定,而且我也不记得在任何示例中看到它。将其发布为答案,我会接受并奖励您的赏金!
【参考方案1】:
由于用户仅在站点级别而不是 IIS 根级别具有管理员权限,因此您需要添加站点名称。
你需要https://machine_name:8172/msdeploy.axd?site=[MySiteName]
,而不是https://machine_name:8172/msdeploy.axd
。
如果不添加,msdeploy
会尝试通过 IIS 的根目录访问该站点。加上参数后直接访问网站,特定网站的管理员权限就足够了。
【讨论】:
具体删除'['和']'。它并不总是很清楚。 另外,请确保 在用户名字段中包含计算机名称。 从 VS2017 发布时遇到同样的问题。是否可以让 Visual Studio 也指定站点?【参考方案2】:尝试直接从命令行运行它
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, DemoSite
和DemoProject.SetParameters.xml
引自here
【讨论】:
此命令与运行 my_deploy_package.cmd 脚本时发出的命令或多或少完全相同,因此没有区别。【参考方案3】:假设您没有使用 MSI 进行安装,并且您已经正确安装和配置了下面引用的这些步骤,请确保 WMSvc 在服务器上正确配置。看看这个接受的答案是否对您有帮助:https://***.com/a/4834248/463478
2.如果未安装Web Management Service,MSI将不会安装Web Management Service handler组件; 处理程序 组件对于非管理员部署是必需的。视窗 应先安装组件 IIS,包括管理服务 使处理程序组件能够安装。
3.如果未安装 PowerShell v2,MSI 不会将 Web 管理服务配置为允许非管理员部署。 这个 设置步骤包括在 IIS 服务器中创建委派规则 Administration.config 文件,允许非管理员用户使用 网络部署。 PowerShell v2 内置在 Windows Server 2008 R2 上,但 可能需要 Windows Server 2008 的 Windows 更新。或者 委派规则可以在安装后手动添加。
【讨论】:
一切都是使用 Web 平台安装程序安装的。 WMSvc 已就位并且看似正确配置。我已按照演练 (iis.net/learn/install/installing-publishing-technologies/…) 中说明的所有步骤设置委派规则等,以允许非管理员部署。当我通过远程 IIS 连接进行操作时,非管理员部署 do work(再次表明所有访问权限均已正确配置),但从命令行完成时会失败。【参考方案4】:这篇文章对我有两点帮助。
-
指定网站名称
将身份验证类型设置为基本。
此外,我的 Web 应用程序名称中包含空格,当我尝试像 https://machine_name:8172/msdeploy.axd?site=my%20web%20app
那样指定服务 url 时,我一直收到错误消息
我能够通过使用附加的 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 ='我的网络应用'"
【讨论】:
以上是关于使用非管理员用户的 WebDeploy 出现 401 未经授权的错误的主要内容,如果未能解决你的问题,请参考以下文章