После долгой настройки проб и ошибок я в настоящее время могу создать сценарий msdeploy.exe для развертывания пакета, созданного в Visual Studio 2010, на удаленном сервере под управлением IIS 7.5 с помощью командной строки, например:
Команда базовой аутентификации:
msdeploy -source:package="project.zip" -dest:auto,computerName='https: // веб-сервер: 8172 / MsDeploy.axd',authtype='Basic',username='DOMAIN\myuser',password='xxx',includeAcls='False' -verb:sync -setParamFile:"SetParameters.xml" -allowUntrusted
Могу ли я избавиться от необходимости вводить пароль в командной строке, включив сквозную аутентификацию? В В документации по веб-развертыванию упоминается параметр authType который может указывать NTLM вместо Basic. Однако всякий раз, когда я пытаюсь это сделать (см. Пример ниже), я получаю сообщение об ошибке 401. В веб-журнале WMSvc отображается 401.2, и в этой записи журнала не указывается идентификатор пользователя, в отличие от предыдущих попыток с использованием обычной проверки подлинности, на самом деле показывающего DOMAIN \ myuser в веб-журнале. Никакой другой полезной информации в программе просмотра событий клиента или сервера не обнаружено.
Примечание. Целевой веб-сервер находится в другом домене, поэтому я net use \\webserver /u:DOMAIN\myuser
установить токен.
Попытка команды сквозной аутентификации:
msdeploy -source:package="project.zip" -dest:auto,computerName='https: // веб-сервер: 8172 / MsDeploy.axd',authtype='NTLM',includeAcls='False' -verb:sync -setParamFile:"SetParameters.xml" -allowUntrusted
Похоже, что msdeploy.exe неправильно аутентифицируется с помощью IIS на уровне HTTP. Что могло быть не так?
Клиент - Windows XP, Сервер - Win2008R2. Оба работают под управлением msdeploy.exe версии 7.1.618.0. У обоих установлены .NET 2.0, 3.5 и 4.0.
Я предполагаю, что мы не можем использовать сквозную аутентификацию, если клиентский компьютер не принадлежит к тому же домену. Если вы используете веб-развертывание 1.1, вы можете попробовать storeCredentials и getCredentials, чтобы не вводить имя пользователя и пароль непосредственно в командной строке.
Это явно запоздалый ответ, и я уверен, что вы решили это или обошли его, но на случай, если это поможет кому-то другому:
Вы определенно можете использовать MSDeploy для развертывания пакета с использованием проверки подлинности NTLM, даже если целевой веб-сервер находится в другом домене. Это примерно та командная строка, которую мы используем:
msdeploy.exe -source:package='MyPackage.csproj.zip' -dest:auto,computerName='https://www.myserver.com:8172/MsDeploy.axd?site=mysitename',authtype='NTLM',includeAcls='False' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"MyPackage.csproj.SetParameters.xml"
Чтобы это сработало, мы запускаем эту команду с исходного компьютера в контексте безопасности имени пользователя + пароля, который идентично соответствует имя пользователя + пароль в целевом домене.
Файл param, вероятно, не имеет отношения к аутентификации, но я просто включил его для полноты. Это метод, который мы используем для применения разных строк подключения к приложению в зависимости от того, где оно развернуто.
Мы не используем подход «сетевого использования» для установки токена, я не уверен, что это легко переводится в аутентификацию NTLM через HTTP.
Возможно, я не полностью понимаю вашу проблему, но не могли бы вы использовать для этого флаг -storeCredentials и -getCredentials?
Перейдите на страницу администратора сайта IIS -> IIS -> Проверка подлинности
Включить анонимную аутентификацию -> указать гостевого пользователя IIS (IUSER_computername)
Предоставьте гостевому пользователю IIS разрешение на папку wwwroot веб-сайта.