web-dev-qa-db-ja.com

msdeploy(Web配置)が401認証の問題で失敗する

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というユーザーを作成し、それをサーバーのローカル管理者グループに追加しました。

私はチェックしました:

  • サービスが正しくインストールされ、開始されたこと
  • ユーザー名のドメイン部分を使用せず、authType = Basicを追加するさまざまな組み合わせ
  • すべての人にそのフォルダへの完全なアクセス許可を与える
  • IISリモート接続を許可する
  • ContentPathおよびiisAppの "msdeploy"ユーザーに管理サービス委任ルールを追加しました(おおまかに this の読み取りに基づいています)
  • サーバーへのRDCに使用する別の管理者アカウントで試しました...
  • 異なるcontentPathsと異なるmsdeployコマンドで試した
  • 特定のアカウントを作成し、そのアカウントをIIS_Usersに追加しました。そのユーザーを自分のWebサイト「IISマネージャーのアクセス許可」に追加し、すべてのプロバイダーに対して「管理サービスの委任」を設定しました。
38
Matt Roberts

この記事に従って、WebDeploy 2.0用にサーバーを正しく構成したと想定しています。

Web配置の構成(IIS.NET)

注:MSは、Web Deploy 2.0および元のリンクはもう有効ではありません。私はこれを更新しましたが、時間の経過とともに動くターゲットになると思います。

また、開発/ビルド/ CIマシンにWeb配置2.0をインストールする必要があります。

まだ1.0を使用している場合は、アップグレードをお勧めします。2.0にはいくつかの大きな改善点があります。

Visual Studio 2010のパブリッシュ機能の使用:

Visual Studioは、サイトを右クリックして[公開]を選択することでサイトを公開できます。これにより、次のダイアログが表示されます。

enter image description here

Visual Studio 2010とWebDeploy 2.0にはいくつかの落とし穴があります。 1つ目は、VS2010がWebDeploy/MSDeploy 2.0に対応していないことです。したがって、公開しようとすると、次のようなエラーが発生します。

エラー1 Web展開タスクが失敗しました。((04/02/2011 12:30:40)要求がリモートコンピューターで処理されたときにエラーが発生しました。)

enter image description here

サーバーのWeb管理サービスの失敗した要求トレースで_C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1_がオンになっていると想定すると、次のエラーも表示されます。

AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData Tracingデプロイメントエージェントの例外。リクエストID ''。タイムスタンプのリクエスト:'02/04/2011
System.UnauthorizedAccessException:パス 'D:\'へのアクセスが拒否されました。

enter image description here

ドライブ文字は、IISサイトが配置されているドライブによって異なります。

初期状態では、GUI内公開メカニズムはデフォルトで間違ったバージョンのMSDeploy(1.0)を使用します。 VS2010にMSDeploy 2.0を使用するように伝えます。これは、次の場所にあるVisual Studio 2010の_devenv.exe.config_ファイルを編集することで実行できます(デフォルトの_c:\_ドライブのインストールを実行した場合):

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_セクションに追加します。

enter image description here

これが完了したら、Visual Studio 2010のすべてのインスタンスを閉じて、この変更を有効にします。 VS2010を再起動し、Webプロジェクトを開いてから、もう一度公開してみてください。今回は成功するはずです。

ビルドパッケージを使用した公開:

Visual Studioは、コマンドラインから実行できるビルドパッケージを生成できます。これは_Project -> Build Deployment Package_を使用して生成されます。継続的な統合などに便利です(パッケージは、_/t:Package_スイッチを指定したmsbuildを使用して生成することもできます)。

通常、パッケージの出力フォルダーのデフォルトは_obj\Package_です。

残念ながら、Visual Studio 2010はこれを少し間違っており、1.0をターゲットとし、サーバーレベルではなくサーバーでデプロイメントをターゲットするmsdeployラッパーバッチスクリプトを生成します。

独自の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のサイトの名前と正確に一致する必要があります。

userNamepasswordは、サイトの委任されたマネージャーユーザーの名前です。これは、サイトレベルで「IISマネージャーのアクセス許可」機能を使用して構成されます。アカウントはローカルのWindowsユーザーアカウントである必要があります。

_-authtype='basic'_-基本認証を強制します。それ以外の場合は、NTLM認証が試行されます。

_-allowuntrusted_-組み込みの自己署名SSL証明書を使用する場合、SSL証明書エラーは無視されます。

そのコマンドラインを使用すると、リモートIIS7サーバーに正常に展開できるはずです。

未加工コンテンツの公開:

場合によっては、静的コンテンツ(またはクラシックASPまたはPHP site))をローカルフォルダーから直接公開することもできます。これは、次の_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の1つの結論:

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リンク)

56
Kev

私にとって、パブリッシングはVisual Studioで機能しましたが、.deploy.cmdスクリプトを実行したときに機能しませんでした。

<UseMsdeployExe>true</UseMsdeployExe>.csprojに設定すると、VSにMSBuildタスクの代わりにmsdeploy.exeを使用するように強制できます。次に、ログレベルを上げると([ツール]> [オプション]> [プロジェクトとソリューション]> [ビルドと実行]> [MSBuildプロジェクトビルド出力の詳細度])、VSが使用するコマンドラインを確認できます。

私の.deploy.cmdに関する問題は次のとおりです。

  • 私のIISユーザーはそのサイトの権限しか持っていなかったため、computerName?site=<SITENAME>が必要でした。
  • AuthType='Basic'パラメータに-dest:が必要でした。
6
Ben Challenor

私たちはあなたと同じような問題に直面していました。

このためには、サービスでリモートエージェントサービスを開始する必要があります。 IPアドレスでエラーが発生したため、PC名を使用しました。したがって、PC名、ユーザー名、パスワードを使用してみてください。

3
navya

結局私は自分のデプロイユーザーアカウントでどの権限が欠けているかを確認したことはありませんでしたが、マシン管理者アカウントを使用した場合、デプロイは成功することがわかりました。ここでは、adminアカウントを使用して展開を行っています。

Ms deploy 2のセットアップに関する素晴らしい情報をまとめたKevへの称賛:)

1
Matt Roberts

それが価値があるもののために。公開は私のために働いていて、それからある日私はこれと全く同じ問題(401承認されていないエラー)を経験しました。VS2012を再起動すると問題が解決しました。他のすべての解決策を試す前に、それを試してみたかったです。

0
Howard