Ошибка msdeploy (Web Deploy) с проблемами аутентификации 401 - PullRequest
38 голосов
/ 13 декабря 2010

Я пытаюсь установить и настроить msdeploy.Я установил удаленный сервис на веб-сервере, но все мои тесты дают мне 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 разрешены удаленные подключения
  • Добавлены правила делегирования службы управления для моего пользователя "msdeploy" для contentPath и iisApp (свободноосновано на чтении this )
  • Пробовал с другой учетной записью администратора, которую я использую для RDC на сервере ...
  • Пробовал с разными contentPaths и разными командами msdeploy
  • Создал определенную учетную запись и добавил ее в IIS_Users.Добавил этого пользователя на мой веб-сайт «Разрешения диспетчера IIS» и настроил «Делегирование службы управления» для всех поставщиков.

Ответы [ 5 ]

56 голосов
/ 04 февраля 2011

Я предполагаю, что вы правильно настроили свой сервер для WebDeploy 2.0 согласно этой статье:

Настройка веб-развертывания (IIS.NET)

Примечание: MS выпустила обновление Web Deploy 2.0, и исходная ссылка больше не действительна. Я обновил это, но я думаю, что со временем это будет движущаяся цель.

Вам также необходимо установить Web Deploy 2.0 на компьютере разработчика / сборки / CI.

Если вы все еще используете 1.0, тогда я рекомендую обновить, в 2.0 есть несколько значительных улучшений.

Использование функции публикации Visual Studio 2010:

Visual Studio может опубликовать сайт, щелкнув правой кнопкой мыши на сайте и выбрав «Опубликовать». Это вызывает следующий диалог:

enter image description here

Существует несколько проблем с Visual Studio 2010 и WebDeploy 2.0. Во-первых, VS2010 не поддерживает WebDeploy / MSDeploy 2.0. Поэтому, если вы попытаетесь опубликовать, вы получите ошибку, такую ​​как:

Ошибка 1 Задача веб-развертывания не удалось. ((02.04.2011 12:30:40) Ошибка произошло, когда запрос был обрабатывается на удаленном компьютере.)

enter image description here

Вы также увидите следующую ошибку в Трассировке невыполненных запросов для службы веб-управления на сервере в C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1 при условии, что она включена:

AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
EventData Tracing исключение агента развертывания. Запросить ID ''. Отметка времени запроса: '02 / 04/2011
System.UnauthorizedAccessException: доступ к пути 'D: \' запрещен.

enter image description here

Буква диска зависит от того, на каком диске находится ваш сайт IIS.

По умолчанию механизм публикации в графическом интерфейсе по умолчанию использует неверную версию MSDeploy (1.0). Мы хотим сказать VS2010 использовать MSDeploy 2.0. Вы можете сделать это, отредактировав файл devenv.exe.config Visual Studio 2010, который находится в (при условии, что вы установили диск по умолчанию c:\):

Для 64-битных систем: c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE Для 32-битных систем: c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE

Откройте devenv.exe.config в своем любимом редакторе XML (я только что использовал 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, откройте веб-проект и повторите попытку публикации. На этот раз это должно быть успешно.

Публикация с использованием пакета сборки:

Visual Studio может создать пакет сборки, который может быть выполнен из командной строки. Это генерируется с помощью Project -> Build Deployment 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:\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 - это имя делегированного менеджера пользователя для сайта. Это настраивается с помощью функции «Разрешения диспетчера 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 вызывает проблемыбудет решена в пакете обновления 1 (который я еще не успел посмотреть).

Один финал VS2010 Получено:

При публикации с использованием Visual Studio 2010,Пакет сборки «Публикация» приводит к тому, что списки ACL анонимной учетной записи сайта изменяются на «Только чтение» для всех файлов и папок, за исключением папки App_Data, которая изменяется на «Чтение и запись».

Это может бытьЧтобы обойти эту проблему, добавьте следующий параметр в файл .csproj для каждого <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">:

<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>

Или, если вы используете msbuild:

msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False

Я нашел этот полезный слепокотсюда:

Пропуск настройки ACL в пакете развертывания Visual Studio 2010 (ссылка на WayBackMachine, поскольку исходное содержимое больше недоступно)

6 голосов
/ 22 декабря 2011

Для меня публикация работала в Visual Studio, но она не работала, когда я запускал сценарий .deploy.cmd.

Установив <UseMsdeployExe>true</UseMsdeployExe> в своем .csproj, вы можете заставить VS использовать msdeploy.exe вместо задачи MSBuild.Затем, подняв уровень ведения журнала (Инструменты> Параметры> Проекты и решения> Построить и запустить> Подробность сборки сборки проекта MSBuild), вы можете увидеть командную строку, которую использует VS.

Проблемы с моим .deploy.cmd были:

  • Мой пользователь IIS имел разрешения только для этого сайта, поэтому мне нужно было ?site=<SITENAME> в computerName.
  • Мне нужно AuthType='Basic' в параметре -dest:.
3 голосов
/ 18 января 2011

Мы столкнулись с той же проблемой, что и ваша.

Для этого вам нужно запустить службу удаленного агента в сервисах. Мы использовали имя ПК, потому что IP-адрес выдавал ошибку. Поэтому попробуйте использовать имя компьютера, имя пользователя и пароль.

1 голос
/ 02 июня 2011

В конце концов, я так и не выяснил, какие разрешения мне не хватало в моей учетной записи пользователя для развертывания, но обнаружил, что, если я использую учетную запись администратора компьютера, развертывание будет успешным.На данный момент я использую учетную запись администратора для развертывания.

Престижность Kev для фантастического и информативного резюме настройки ms deploy 2:)

0 голосов
/ 17 декабря 2012

За что это стоит.Публикация работала для меня, и однажды у меня возникла та же проблема (401 несанкционированная ошибка). Перезапуск VS2012 решил эту проблему.Жаль, что я попробовал это прежде, чем попробовать любое другое решение.

...