Удаленное администрирование IIS7 через c # - PullRequest
2 голосов
/ 30 марта 2011

Я изучал Microsoft.Web.Administration.dll и класс ServerManager, пытаясь контролировать наш экземпляр Windows Server 2008 IIS7.

Я включил удаленное администрирование и могу подключиться через инструмент удаленного администрирования IIS, однако, когда я пытаюсь использовать следующее, я не могу подключиться:

ServerManager.OpenRemote(serverName);

Этот класс не позволяет мне указывать имя пользователя и пароль на удаленном сервере IIS7, как это делает инструмент удаленного администрирования IIS.

Это все вызывается через наш процесс сборки с использованием NAnt.

Как другие контролируют свой удаленный IIS7-сервер в рамках настройки CI?

Ответы [ 3 ]

3 голосов
/ 30 марта 2011

Вам нужно будет запустить приложение под пользователем домена (пользователем Active Directory), у которого есть права на изменение файлов конфигурации.

Аутентификация Windows сделает все остальное.

1 голос
/ 30 марта 2011

Как говорит Одед, Active Directory необходимо открыть для подключения к удаленному серверу, используя ServerManager.

Если у вас есть сервер доступа RDP администратора, есть альтернатива, которая заключается в использовании WinRM и Remote PowerShell (лучше всего работает с PowerShell 2.0, который поставляется с последней версией WinRM) в ваших сценариях сборки:

Средство командной строки для удаленного управления Windows (Winrm.cmd)

Чтобы быстро настроить WinRM для двух машин, не входящих в домен:

Клиент:

winrm quickconfig  (just say yes)
winrm set winrm/config/Client/Auth '@{Basic="true"}'
:: Only do this next line if not using HTTPS
winrm set winrm/config/Client '@{AllowUnencrypted="true"}'
winrm set winrm/config/Client '@{TrustedHosts="hostname_or_ip"}'

Сервер:

winrm quickconfig (just say yes)
winrm set winrm/config/Service/Auth '@{Basic="true"}'

:: See: http://support.microsoft.com/kb/2019527 regarding https
winrm quickconfig -transport:https

:: Only do this if not using HTTPS AND you are happy about sending credentials
:: in clear text.
winrm set winrm/config/Service '@{AllowUnencrypted="true"}'

Теперь есть несколько предостережений. WinRM пробьет дыру в брандмауэре Windows для портов 5985 и 5986 для приемника (если работает под управлением Windows 2003, он будет использовать порты 80 и 443). Это может не понравиться вам, и вам, вероятно, лучше поговорить с администраторами сети о том, как это обезопасить.

После настройки WinRM вам потребуется настроить учетную запись пользователя на удаленном сервере, который является членом группы администраторов. После этого вы можете проверить. На сервере сборки:

# the following line will prompt for a username and password, enter the name of the account
# you just configured on the IIS box
$cred = Get-Credential

# next test the connection
Test-WSMan -ComputerName <server_name_or_ip> -Authentication default `
           -Credential $cred

Если все хорошо, вы должны увидеть следующий ответ:

wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.x
                  sd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 6.1.7600 SP: 0.0 Stack: 2.0

Далее нужно подключиться к удаленному сеансу PowerShell:

Enter-PSSession <server_name_or_ip> -Authentication default -Credential $cred

Если это успешно, у вас должно быть приглашение PowerShell на удаленной машине.

Используя Remote PowerShell, вы можете загрузить поставщика WebAdministration для PowerShell и манипулировать многими аспектами IIS для своего сердца:

Поставщик веб-администрирования (IIS) для Windows PowerShell

Для подключения к удаленному серверу вам необходимо предоставить объект PSCredential. Как упоминалось выше, вы можете указать это с помощью:

$cred = Get-Credential

Однако это всегда требует некоторого взаимодействия с клавиатурой для предоставления имени пользователя и пароля. Очевидно, что это не годится для автоматизированного КИ.

Однако вы можете сохранить пароль в файле. Для этого выполните один раз (или всякий раз, когда пароль меняется):

read-host -assecurestring | convertfrom-securestring | out-file C:\securestring.txt

Затем, когда вам нужно создать PSCredential для аутентификации на удаленном сервере:

$username = "deployment_user"
$password = cat C:\securestring.txt | convertto-securestring
$cred = new-object -typename System.Management.Automation.PSCredential `
         -argumentlist $username, $password

$serverNameOrIp = "192.168.1.1"
Enter-PSSession $serverNameOrIp -Authentication default -Credential $cred

Вышеуказанный скрипт был получен из следующей записи в блоге, но я продублировал, чтобы сохранить здесь на случай, если статья погаснет:

Использование PSCredentials без приглашения - GeeksWithBlogs

В любом случае, после подключения к удаленному серверу вы можете вводить дополнительные команды, такие как:

Import-Module WebAdministration
CD IIS:\Sites

и т. Д.

К большинству вышеперечисленного следует подходить с осторожностью, если данный аппарат подключен к Интернету и единственный доступ к нему осуществляется через Интернет. Если это так, рассмотрите возможность ограничения портов WinRM только для VPN.

0 голосов
/ 01 июня 2011

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

Из моего сценария NAnt у меня есть ряд пользовательских задач, которые взаимодействуют со службой WCF и изменяют параметры IIS.по мере необходимости.

Поскольку это внутренняя среда разработки, меня не слишком беспокоит безопасность, и фактические изменения в IIS, которые мне разрешены, очень простые.

...