среда, 18 ноября 2009 г.

Удаленная работа с виртуальными машинами ESX/ESXi

Иногда возникает необходимость предоставить пользователю доступ к виртуальной машине, расположенной на сервере ESX/ESXi. Хотя консоль VMware Infrastructure/vSphere Client и справляется с данной задачей, но является достаточно громоздкой. В качестве альтернативных методов выступают VNC и Remote Console.

Для включения VNC клиента, отредактируйте файл .vmx виртуальной машины, добавив туда следующие строчки:
remotedisplay.vnc.enabled=”true”
remotedisplay.vnc.password = “<ПАРОЛЬ>
remotedisplay.vnc.port=”<ПОРТ>

, где <ПАРОЛЬ> - любой подходящий пароль, <ПОРТ> - порт, используемый для подключения.


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

Теперь вы сможете подключаться с помощью VNC клиента (например, UltraVNC).


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

В качестве альтернативного варианта вы можете воспользоваться VMware Remote Console, входящей в состав VMware Player. Просто запустите из командной строки:
vmplayer -h <АДРЕС_ESX> <ПУТЬ_К_VMX>

Например так:
Обратите внимание на формат пути к .VMX файлу (после квадратных скобок должен быть пробел).

При подключении у вас запросят имя пользователя и пароль учетной записи ESX, у которой есть права на подключение:
 

Одно замечание - при попытке подключиться к ESXi 3.5 U4 с помощью Remote Console от Vmplayer 3.0, консоль закрывается без объяснения причин. В качестве решения, вы можете скачать модифицированную версию Remote Console от компании Minicom. С ESX 4.0 такой проблемы не наблюдается.

Update: если вы планируете подключаться с помощью Remote Console к ESX/ESXi версии 4.1 и выше, то вам требуется вручную создать на хосте учетную запись из-под которой производится подключение, так как доменная авторизация при интеграции с Active Directory не работает.

вторник, 10 ноября 2009 г.

Настройка WinRM на Windows Server 2008

Бывают случаи, когда требуется выполнить какую-либо команду на сервере локально (например, сконфигурировать iSCSI Initiator). Подключаться для этого через Remote Desktop и запускать cmd - неудобно, использовать Telnet - небезопасно, ставить на сервер демона ssh - не... хочется...

Специально для таких запущенных случаев, Microsoft, начиная с Windows Server 2003 R2, снабдила администраторов новым средством управления - Windows Remote Management (WinRM), позволяющим удаленно выполнять команды, используя стандартные средства ОС, и обеспечивая при этом должный уровень безопасности.

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


Настройка WinRM
В качестве примера я рассмотрю процесс настройки WinRM на Windows Server 2008. Эта процедура никак не отличается от настройки WinRM, например, на Windows Vista или Hyper-V Server.

Проще всего WinRM настроить можно, используя режим быстрой конфигурации, набрав в CMD:
winrm quickconfig
и ответив утвердительно ('y') на вопрос о создании нового объекта-listener'а, прослушающего порт TCP 80, и использующего протокол HTTP для коммуникаций между клиентом и сервером.

И все, сервером можно управлять удаленно, используя команду:
winrs -r:<ИМЯ_СЕРВЕРА> <КОМАНДА>
,где <ИМЯ_СЕРВЕРА> - имя или IP адрес сервера, к которому осуществляется подключение;
<КОМАНДА> - удаленная команда, которую требуется выполнить.

Если клиент и сервер не являются членами одного домена, вам потребуется дополнительно указать имя пользователя из-под которого будет запускаться команда и его пароль:
winrs -r:<ИМЯ_СЕРВЕРА> -u:<ИМЯ_ПОЛЬЗОВАТЕЛЯ> -p:<ПАРОЛЬ> <КОМАНДА>
, а заодно, как советует появившееся сообщение, добавить сервер в список доверенных узлов, либо использовать более надежный протокол для коммуникации (HTTPS).

Для добавления узла в список надежных, выполните на клиенте, с которого планируете подключаться:
winrm set winrm/config/client @{TrustedHosts="<ИМЯ_УЗЛА1>[,<ИМЯ_УЗЛА2>]"}

После настройки вы можете получить информацию о существующих listener'ах с помощью команды:
winrm enumerate winrm/config/listener

Удалить существующий listener можно следующим образом:
winrm delete winrm/config/listener?Address=*+Transport=HTTPS

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

Однако, для создания listener'а с поддержкой HTTPS вам потребуется цифровой сертификат, который можно запросить у доверенного Центра Сертификации, либо воспользоваться различными утилитами по созданию самоподписанных (самозаверенных) сертификатов, например, Makecert, входящей в состав Windows SDK. Скачать Makecert отдельно можно отсюда.

Для создания самоподписанного серитификата выполните следующую команду:
makecert -a sha1 -r -pe -n "CN=<ИМЯ_СЕРВЕРА>" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -m 12 <ФАЙЛ_СЕРТИФИКАТА>
, где <ИМЯ_СЕРВЕРА> соответствует имени, которое будет использовать клиент при подключении к серверу;
<ФАЙЛ_СЕРТИФИКАТА> - путь к файлу, куда будет сохранен сертификат с открытым ключем.

Сертификат с закрытым ключем будет создан и помещен в хранилище сертификатов локального компьютера. Добавьте его к доверенным корневым сертификатам:
certutil -addstore root cert.cer

Теперь просмотрите хранилище сертификатов, найдите там требуемый сертификат и запишите его Thumbprint (Cert Hash):
certutil -store my

Наконец, можно приступать к созданию HTTPS listener. Введите команду:
winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="<ИМЯ_УЗЛА>";CertificateThumbprint="<ХЭШ_СЕРТИФИКАТА>";Port="<ПОРТ>"}
,где <ИМЯ_УЗЛА> - имя, которое указывается при обращении к серверу
<ХЭШ_СЕРТИФИКАТА> - Thumbprint, который вы узнали на предыдущем шаге (без пробелов).
<ПОРТ> - порт, на который будет подключаться клиент (TCP 443 по-умолчанию).

Если на сервере включен брандмауэр Windows, не забудьте добавить правило:
netsh advfirewall firewall add rule name="allow WinRM on 4443" protocol=TCP dir=in localport=4443 action=allow

При использовании самоподписанных сертификатов, вам придется добавить его к доверенным корневым сертификатам на клиенте.

После выполнения всех шагов, вы, наконец, получите возможность удаленного выполнения команд:

Обратите внимание, что в случае использования нестандартного порта, вам потребуется специально его указать. Чтобы не делать этого каждый раз, вы можете изменить стандартный порт, который клиент использует при подключении по HTTPS, с помощью команды:
winrm set winrm/config/client/DefaultPorts @{HTTPS="4443"}

Заключение
Как видите, настройка Windows Remote Management достаточно проста в классических ситуациях (с использованием единого домена и CA), однако, при небольшом отклонении от данного шаблона могут обнаружиться несколько подводных камней. К WinRM привыкнуть можно достаточно быстро, особенно, если вы частенько пользуетесь консолью для настройки системы.

При подготовке статьи использовались следующие материалы:
  1. How to enable Windows Remote Shell
  2. Средство создания сертификатов (Makecert.exe)
  3. How to use makecert.exe to create a self-signed test certificate that can be used with IIS for SSL