Вам когда-нибудь требовалось удаленно управлять IIS-сервером, менять его конфигурацию или добавлять простой веб-сайт, причем делать все это из удаленного местоположения? Очевидно, что по соображениям безопасности нельзя просто открыть IIS Manager и подсоединиться к удаленному серверу. На каждом IIS-сервере, которым вы собираетесь управлять, необходимо активизировать и настроить удаленное управление и назначить сертификат для HTTPS.
Можно быстро и без усилий настроить удаленное управление IIS в графическом IIS Manager, но тогда вы должны сидеть за веб-сервером или использовать Remote Desktop Protocol (RDP). Если у вас несколько веб-серверов, которыми требуется управлять удаленно, или если вы, как и я, работаете с Server Core, то использовать GUI IIS Manager нецелесообразно или даже невозможно.
Можно настроить удаленное управление любым количеством веб-серверов с помощью Windows PowerShell. Вы можете это сделать для любого нужного вам количества веб-серверов, причем за один раз. Воспользуйтесь специальной функцией Windows PowerShell — удаленным взамодействием (remoting) Windows PowerShell.
Потребуется активизировать удаленное взаимодействие Windows PowerShell на всех IIS-серверах. Без этого никак. Лучше всего активизировать удаленное взаимодействие с помощью объекта групповой политики (Group Policy Object, GPO). Если вы не знаете, как это сделать, или вам нужна дополнительная информация об этом процессе, прочитайте нашу бесплатную электронную книгу «Secrets of PowerShell Remoting», написанную Доном Джоунзом (Don Jones) и доктором Тобиасом Уэлтнером (Dr. Tobias Weltner).
Перед тем как сказать: «Я не вправе это делать», сядьте и прочитайте это руководство. Выполните настройку в тестовой среде, попросите специалистов по безопасности все проверить и получите разрешение на активизацию удаленного взаимодействия. Если ваши веб-серверы работают под управлением Windows Server 2012, удаленное взаимодействие уже активизировано. Иначе это потребуется сделать перед выполнением действий, о которых я расскажу далее.
Удаленное взаимодействие Windows PowerShell полностью безопасно и потребуется в будущем для решения многих задач по управлению IIS. Процесс настройки удаленного взаимодействия несложен, тем не менее, он состоит из нескольких операций. Вот что вам предстоит:
- Создать по сеансу Windows PowerShell для каждого из серверов.
- Установить службу IIS Web Management Service (WMSvc).
- Активизировать IIS WMSvc.
- Запустить IIS WMSvc.
- Заменить временный сертификат.
- Подсоединиться в IIS Manager.
В своем примере я настрою удаленное управление на четырех IIS-серверах: Web1, Web2, Web3 и Web4, причем сразу на всех. После того как они заработают, я заменю временный сертификат на доверяемый сертификат от Active Directory Certificate Services (AD CS).
1. Создание сеансов удаленного доступа через Windows PowerShell для веб-серверов
Первый этап — создание сеансов удаленного доступа через Windows PowerShell для веб-серверов. Начните с создания переменной $Servers, которая будет содержать имена компьютеров, являющихся веб-серверами. Затем создайте сеансы и сохраните их в переменной $Sessions:
PS> C:\> $Servers = 'web1', 'web2', 'web3', 'web4'
PS> C:\> $Sessions = New-PSSession –ComputerName $Servers
Обе переменные будут нужны на всем протяжении процесса. Не пытайтесь сократить этот код, заменив его однострочной командой. Возможно, вы будете заполнять $Servers из текстового файла, CSV-файла или Active Directory (используя командлет Get-ADComputer), но это уже другая тема.
2. Установка IIS WMSvc
IIS WMSvc — дополнительный компонент, который потребуется добавить в IIS. Это несложно сделать в Windows PowerShell с помощью сеансов удаленного доступа (если у вас Windows Server 2012, то первая строка не понадобится):
PS C:\> Invoke-Command –Session $Sessions –ScriptBlock {Import-Module ServerManager}
PS C:\> Invoke-Command –Session $Sessions –ScriptBlock {Add-WindowsFeature Web-Mgmt-Service}
Итак, вы установили IIS WMSvc. Следующий этап — ее активизация.
3. Активизация IIS WMSvc
По умолчанию эта служба управления настроена на разрешение удостоверений Windows, использование порта 8172 и временного сертификата. Пока что оставим все как есть — мы заменим временный сертификат на доверяемый в самом конце процесса. Чтобы активизировать службу управления, измените записи реестра на удаленных веб-серверах:
PS C:\> Invoke-command –Session $Sessions -ScriptBlock{Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WebManagement\Server -Name EnableRemoteManagement -Value 1}
Теперь служба удаленного управления активна, и можно ее запустить.
4. Запуск IIS WMSvc
По умолчанию IIS WMSvc не запускается. По сути, служба настроена на запуск вручную. Если в будущем вы перезагрузите веб-сервер, то служба управления не будет выполняться. Измените тип запуска на Automatic, а затем запустите службу:
PS C:\> Invoke-command –Session $Sessions -ScriptBlock {Set-Service -name WMSVC -StartupType Automatic}
PS C:\> Invoke-command –Session $Sessions -ScriptBlock {Start-service WMSVC}
Теперь служба управления выполняется, и вы можете удаленно управлять веб-серверами в IIS Manager. Единственная проблема — использование временного недоверяемого сертификата, поэтому замените сертификат на доверяемый.
5. Замена временного сертификата
Имеется много способов замены временного сертификата, в частности, применение новой функции IIS 8 — хранения сертификатов в Central Certificate Store. Это мой излюбленный способ.
Я выполняю пару операций по копированию и установке нового сертификата из .pfx-файла, а затем задаю привязки веб-сайтов для нового сертификата. В примере предполагается, что сертификат с поддержкой поддоменов (wildcard certificate) хранится у меня на локальном компьютере в файле C:\_.Company.loc.pfx. Сначала скопируйте сертификат (.pfx-файл) на удаленные веб-серверы, затем установите сертификат с помощью CertUtil.exe:
PS C:\> $Servers | Foreach-Object {Copy-Item -Path C:\_.Company.loc.pfx -Destination "\\$_\c$"}
PS> c:\> Invoke-Command -Session $Sessions {certutil -p P@ssw0rd -importpfx c:\_.company.loc.pfx}
Обратите внимание, что я передаю пароль открытым текстом. Удаленное взаимодействие Windows PowerShell полностью безопасно и обеспечивает шифрование. После установки сертификата важно не забыть удалить .pfx-файлы с веб-серверов:
PS> $Servers | Foreach-Object {Remove-Item -Path "\\$_\c$\_.Company.loc.pfx"}
Теперь мы воспользуемся свойством Thumbprint (отпечаток) установленного сертификата — нужно будет изменить привязки для службы управления. Чтобы это сделать, понадобится IIS-провайдер. Сначала загрузите модуль WebAdministration на удаленные веб-серверы:
PS C:\> Invoke-Command -Session $Sessions {Import-Module WebAdministration}
Получите свойство Thumbprint сертификата, необходимое для создания новой привязки:
PS C:\> Invoke-Command -Session $Sessions {$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where {$_.subject -like "*company*"} | Select-Object -ExpandProperty Thumbprint}
Удалите старую SSL-привязку:
PS C:\> Invoke-command -Session $Sessions {Remove-Item -Path IIS:\SslBindings\0.0.0.0!8172}
Добавьте новую SSL-привязку, указав свойство Thumbprint сертификата:
PS C:\> Invoke-Command -Session $Sessions {Get-Item -Path "cert:\localmachine\my\$cert" | New-Item -Path IIS:\SslBindings\0.0.0.0!8172}
Теперь вы готовы к подсоединению к веб-серверам в IIS Manager.
6. Подсоединение к удаленным веб-серверам в IIS Manager
Последний этап — открыть IIS Manager, выбрать Start Page в панели слева и выбрать Connect to a server в центральной панели. Укажите имя сервера и свои удостоверения, и вы увидите новое соединение в навигационной панели IIS Manager.
Поскольку я нередко выполняю такие операции, я взял приведенные выше команды и поместил их в сценарий. Если вы полагаете, что они потребуются вам более одного раза — а я уверен, что так и будет — всегда лучше автоматизировать этот процесс.