[英]msdeploy (Web Deploy) failing with 401 auth issues
我正在尝试安装和设置msdeploy
。 我已经在Web服务器上安装了远程服务,但我的所有测试都给了我401 unauthorised error
。 服务器是Windows 2008 R2。
我正在测试一个非常简单的msdeploy命令:
msdeploy -verb:dump -source:contentPath=c:\inetpub\wwwroot\MyApp,computerName=<IP HERE>,userName=Domain\msdeploy,password=MyPassword
而错误:
Error: Object of type 'contentPath' and path 'c:\inetpub\wwwroot\MonApp' cannot be created.
Error: Remote agent (URL http://<IP HERE>/MSDEPLOYAGENTSERVICE) could not be contacted. Make sure the remote agent service is installed and started on the target computer.
Error: An unsupported response was received. The response header 'MSDeploy.Response' was '' but 'v1' was expected.
Error: The remote server returned an error: (401) Unauthorized.
Error count: 1.
我创建了一个名为msdeploy的用户,并将其添加到服务器上的本地管理员组。
我检查过:
我假设您已根据本文为WebDeploy 2.0正确配置了服务器:
注意: MS已经发布了Web Deploy 2.0的刷新版本,原始链接不再有效。 我已经对此进行了更新,但我认为随着时间的推移,这将是一个不断变化的目标。
您还需要在开发/构建/ CI计算机上安装Web Deploy 2.0。
如果您仍在使用1.0,那么我建议升级,2.0中有一些巨大的改进。
使用Visual Studio 2010的发布功能:
Visual Studio可以通过右键单击站点并选择“发布”来发布站点。 这引出了以下对话:
Visual Studio 2010和WebDeploy 2.0有几个问题。 首先是VS2010不支持WebDeploy / MSDeploy 2.0。 因此,如果您尝试发布,您将收到如下错误:
错误1 Web部署任务失败。((04/02/2011 12:30:40)在远程计算机上处理请求时发生错误。)
您还会在C:\\inetpub\\logs\\wmsvc\\TracingLogFiles\\W3SVC1
的服务器上的Web管理服务的失败请求跟踪中看到以下错误,假设您已启用此功能:
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData跟踪部署代理程序异常。 请求ID''。 索取时间戳:'02 / 04/2011
System.UnauthorizedAccessException:拒绝访问路径“D:\\”。
驱动器号将根据IIS站点所在的驱动器而有所不同。
开箱即用,GUI内发布机制默认使用错误版本的MSDeploy(1.0)。 我们想告诉VS2010使用MSDeploy 2.0。 您可以通过编辑Visual Studio 2010的devenv.exe.config
文件来执行此操作(假设您执行了默认的c:\\
drive install):
对于64位系统: c:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE
对于32位系统: c:\\Program Files\\Microsoft Visual Studio 10.0\\Common7\\IDE
在您喜欢的XML编辑器中打开devenv.exe.config
(我刚刚使用Visual Studio 2010本身)并复制以下xml:
<dependentAssembly>
<assemblyIdentity
name="Microsoft.Web.Deployment"
publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>
将其添加到/configuration/runtime/assemblyBinding
部分:
完成此操作后,关闭Visual Studio 2010的所有实例以允许此更改生效。 重新启动VS2010,打开一个Web项目,然后再次尝试发布。 这一次应该是成功的。
使用构建包发布:
Visual Studio可以生成可以从命令行执行的构建包。 这是使用Project -> Build Deployment Package
。 方便连续集成等(也可以使用msbuild和/t:Package
开关生成/t:Package
)。
包的输出文件夹通常默认为obj\\Package
。
不幸的是,Visual Studio 2010有点错误并生成一个msdeploy包装器批处理脚本,目标是1.0并在服务器而不是站点级别进行目标部署。
除了制作自己的msdeploy.exe命令行之外,没有其他快速解决方法。 我将它分成几行,使其更具可读性:
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe" -source:archiveDir='d:\sites\DemoApp\obj\Package\Archive' -dest: auto, computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename', userName='demosite', password='somepassword', authtype='basic', includeAcls='False' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"d:\sites\DemoApp\obj\Package\Archive.SetParameters.xml" -allowuntrusted
首先要注意的是msdeploy.exe
的路径。 Visual Studio生成1.0版的路径。 我已将此更改为使用2.0。
值得注意的参数:
-source:archiveDir=
告诉msdeploy我们正在部署一个包并提供本地位置
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'
- 这告诉MSDEPLOY部署到IIS7上的特定站点。 yoursitename
应与IIS中的站点名称完全匹配。
userName
和password
are是站点的委派管理器用户的名称。 这是使用站点级别的“IIS管理器权限”功能进行配置的。 该帐户必须是本地Windows用户帐户。
-authtype='basic'
- 这会强制进行基本身份验证,否则会尝试进行NTLM身份验证。
-allowuntrusted
- 如果您使用内置的自签名SSL证书,则会忽略任何SSL证书错误。
如果使用该命令行,则应该能够成功部署到远程IIS7服务器。
发布原始内容:
有时我们想直接从本地文件夹发布一些静态内容(或者甚至是经典ASP或PHP站点)。 我们可以使用以下msdeploy.exe
命令行执行此操作:
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe" -source:contentPath='d:\websites\mysite' -dest: contentPath='yoursitename', computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename', userName='demosite', password='somepassword', authtype='basic', includeAcls='False' -verb:sync -allowuntrusted
同样的规则同样适用于-dest:contentPath
和computerName
。
我相信MSDeploy版本问题将在SP1中得到解决(我还没有机会查看)。
一个最终的VS2010问题:
使用Visual Studio 2010发布时,“发布”构建包会导致站点匿名帐户的ACL更改为“只读”所有文件和文件夹,但App_Data
文件夹除外,该文件夹更改为“读取”和“写入”。
这可以通过在每个<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
下的.csproj
文件中添加以下设置来解决:
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
或者如果你正在使用msbuild:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
我从这里发现了有用的金块:
跳过在Visual Studio 2010部署包中设置ACL (WayBackMachine链接,因为原始内容不再可用)
对我来说,发布在Visual Studio中工作,但是当我运行.deploy.cmd
脚本时它不起作用。
通过在.csproj
设置<UseMsdeployExe>true</UseMsdeployExe>
,可以强制VS使用msdeploy.exe而不是MSBuild任务。 然后通过调高日志记录级别(工具>选项>项目和解决方案>构建并运行> MSBuild项目构建输出详细程度),您可以看到VS使用的命令行。
我的.deploy.cmd
的问题是:
computerName
使用?site=<SITENAME>
。 -dest:
参数中需要AuthType='Basic'
。 我们遇到了与您类似的问题。
为此,您需要在服务中启动远程代理服务。 我们使用了PC名称,因为IP地址出错了。 所以尝试使用pc名称,用户名和密码。
最后,我从未尝试过我的部署用户帐户所缺少的权限 - 但发现如果我使用机器管理员帐户,则部署会成功。 目前我正在使用管理员帐户进行部署。
感谢Kev提供有关设置ms部署2的精彩和内容丰富的摘要:)
物有所值。 发布对我有用,然后有一天我遇到了同样的问题(401未经授权的错误)重启VS2012解决了这个问题。 希望我在尝试其他解决方案之前尝试过。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.