Вопрос

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

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

ServerManager.OpenRemote(serverName);

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

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

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

Это было полезно?

Решение 3

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

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

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

Другие советы

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

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

Как говорит Одед, вам нужна 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, вы можете затем загрузить поставщика веб-администрирования для PowerShell и манипулировать многими аспектами IIS по своему усмотрению:

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

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

$cred = Get-Credential

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

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top