msdeploy(Web部署)失败401authentication问题
我想要安装和设置msdeploy
。 我已经在Web服务器上安装了远程服务,但我所有的testing都给了我一个401 unauthorised error
。 服务器是Windows 2008 R2。
我正在testing一个非常简单的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.
我创build了一个名为msdeploy的用户,并将其添加到服务器上的本地pipe理员组。
我查过了:
- 该服务安装正确,我开始了
- 不使用用户名的域名部分,并添加authType = Basic的各种组合
- 给予所有人对该文件夹的完全权限
- 在IIS中允许远程连接
- 为我的“msdeploy”用户的contentPath和iisApp添加了pipe理服务委派规则(松散地基于这个 )
- 尝试用不同的pipe理员帐户,我使用的RDC到服务器…
- 尝试了不同的contentPaths和不同的msdeploy命令
- 创build一个特定的帐户,并将该帐户添加到IIS_Users。 将该用户添加到我的网站“IISpipe理器权限”中,并为所有提供者设置“pipe理服务委派”。
我假设你已经根据这篇文章正确configuration了WebDeploy 2.0的服务器:
configurationWeb部署(IIS.NET)
注意: MS已经发布了Web Deploy 2.0的刷新,原来的链接不再有效了。 我已经更新了这个,但是我认为随着时间的推移这将是一个移动的目标。
您还需要在开发/构build/ CI机器上安装Web Deploy 2.0。
如果你仍然使用1.0,那么我build议升级,在2.0中有一些巨大的改进。
使用Visual Studio 2010的发布function:
Visual Studio可以通过右键单击该站点并select“发布”来发布站点。 这带来了以下对话:
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
服务器上的Webpipe理服务的失败请求跟踪中,您也会看到以下错误:
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData跟踪部署代理exception。 请求ID“。 请求时间戳:'02 / 04/2011
System.UnauthorizedAccessException:访问path“D:\”被拒绝。
驱动器号将根据您的IIS站点位于哪个驱动器而有所不同。
开箱即用,GUI中的Publish机制默认使用错误版本的MSDeploy(1.0)。 我们想告诉VS2010使用MSDeploy 2.0。 您可以通过编辑Visual Studio 2010的devenv.exe.config
文件(假设您执行了默认的c:\
drive安装)来执行此操作:
对于64位系统: c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
对于32位系统: c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
在你最喜欢的XML编辑器(我刚刚使用Visual Studio 2010本身)中打开devenv.exe.config
并复制下面的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
部分:
完成此操作后,请closuresVisual Studio 2010的所有实例,以使此更改生效。 重新启动VS2010,打开一个Web项目,然后尝试再次发布。 这一次应该是成功的。
使用构build包发布:
Visual Studio可以生成一个可以从命令行执行的构build包。 这是使用“ Project -> Build Deployment Package
。 方便持续集成之类的(也可以使用带有/t:Package
开关的msbuild生成/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:\网站\ DemoApp \ OBJ \包\存档' -dest: 汽车, 计算机名=的 'https://yoursite.com:8172 / msdeploy.axd网站= yoursitename', 用户名= 'demosite', 口令= 'somepassword', 的authType = '基本', includeAcls = '假' -verb:同步 -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile: “d:\网站\ DemoApp \ OBJ \包\ Archive.SetParameters.xml” -allowuntrusted
首先要注意的是msdeploy.exe
的path。 Visual Studio生成1.0版的path。 我已经改变了这个使用2.0。
值得注意的参数:
-source:archiveDir=
告诉msdeploy我们正在部署一个包并提供本地位置
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'
– 这告诉MSDEPLOY部署到IIS7上的特定站点。 yoursitename
应完全匹配在IIS中的网站的名称。
userName
和password
是该网站的委派pipe理员用户的名称。 这是使用站点级别的“IISpipe理器权限”functionconfiguration的。 该帐户需要是本地Windows用户帐户。
-authtype='basic'
– 这将强制进行基本身份validation,否则尝试执行NTLM身份validation。
-allowuntrusted
– 如果您使用内置的自签名SSL证书,则会忽略任何SSL证书错误。
如果使用该命令行,则应该能够成功部署到远程IIS7服务器。
发布原始内容:
有时我们只想直接从本地文件夹发布一些静态内容(甚至可能是一个经典的ASP或PHP网站)。 我们可以使用以下msdeploy.exe
命令行来执行此操作:
“C:\ Program Files \ IIS \ Microsoft Web Deploy v2 \\ msdeploy.exe” -source:的contentPath = 'd:\网站\ mysite的' -dest: 的contentPath = 'yoursitename', 计算机名=的 'https://yoursite.com:8172 / msdeploy.axd网站= yoursitename', 用户名= 'demosite', 口令= 'somepassword', 的authType = '基本', includeAcls = '假' -verb:同步 -allowuntrusted
同样的规则同样适用于-dest:contentPath
和computerName
。
我相信MSDeploy版本问题将在SP1中解决(我还没有机会看看)。
一个最终VS2010难题:
当使用Visual Studio 2010进行发布时,“发布”构build包会导致网站的匿名帐户的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
脚本.deploy.cmd
。
通过在.csproj
设置<UseMsdeployExe>true</UseMsdeployExe>
,可以强制VS使用msdeploy.exe而不是MSBuild任务。 然后打开日志logging级别(工具>选项>项目和解决scheme>生成并运行> MSBuild项目生成输出详细信息),您可以看到VS使用的命令行。
我的.deploy.cmd
的问题是:
- 我的IIS用户只有该网站的权限,所以我需要在
computerName
中的?site=<SITENAME>
。 - 我在
-dest:
参数中需要AuthType='Basic'
。
我们遇到了和你一样的类似问题。
为此,您需要启动服务中的远程代理服务。 我们使用PC名称,因为IP地址给出错误。 所以尝试使用电脑名称,用户名和密码。
最后,我从来没有做过我的部署用户帐户缺less什么权限 – 但发现如果我使用机器pipe理员帐户,部署将成功。 现在我正在使用pipe理员帐户进行部署。
荣誉Kev的神奇和翔实的总结设置MS部署2 🙂
物有所值。 出版为我工作,然后有一天,我有这个相同的问题(401未经授权的错误)重新启动VS2012解决了这个问题。 希望我已经尝试了所有其他解决scheme之前尝试。