Azure Powershell Runbook - вызывает команды на удаленной виртуальной машине (ARM aka V2)
Что мне нужно
Я хочу иметь модуль Runbook для автоматизации, который выполняет команды на удаленной виртуальной машине (виртуальная машина является виртуальной машиной V2 или Resource Manager).
Я нашел примеры, чтобы заставить это работать с классическими виртуальными машинами, но я не могу заставить его работать на виртуальных машинах RM (лучше всего я нашел: https://alexandrebrisebois.wordpress.com/2015/08/14/azure-automation-remote-powershell-and-a-virtual-machine/).
У кого-нибудь есть пример выполнения команд powershell на удаленной виртуальной машине V2 в runbook автоматизации?
Где я застрял в настоящее время
Я попытался настроить 2-й фрагмент кода примера (часть, которая вызывает команду), и я получаю следующую ошибку:
[vm-template] Connecting to remote server vm-template failed with the following error
message : The WinRM client cannot process the request. If the authentication scheme is
different from Kerberos, or if the client computer is not joined to a domain, then HTTPS
transport must be used or the destination machine must be added to the TrustedHosts
configuration setting. Use winrm.cmd to configure TrustedHosts. Note that computers in the
TrustedHosts list might not be authenticated. You can get more information about that by
running the following command: winrm help config. For more information, see the
about_Remote_Troubleshooting Help topic.
+ CategoryInfo : OpenError: (vm-template:String) [], PSRemotingTransportException
+ FullyQualifiedErrorId : ServerNotTrusted,PSSessionStateBroken
Насколько я понимаю, так как я не использую Kerberos (даже не знаю, что это такое), я должен использовать HTTPS. И для этого я должен выполнить первую половину примера кода, который посвящен импорту сертификата (импорт, где, кстати, поскольку runbook запускается "в лазурном"?).
Я нашел несколько страниц, которые объясняют, как включить HTTPS ( не удалось подключиться к удаленному серверу с помощью WinRM из PowerShell) и создать сертификат ( http://www.jayway.com/2011/11/21/winrm-w-self-signed-certificate-in-4-steps/) но они требуют выполнения некоторых команд на ОБАХ машинах; Я, конечно, могу запускать команды на своей удаленной виртуальной машине, но я не понимаю, как я мог бы сделать это для клиентского компьютера, которого на самом деле не существует, так как Runbook работает непосредственно в Azure.
Любая помощь с благодарностью, спасибо!
1 ответ
Настроена ли ваша группа безопасности сети на открытие порта 5985 (winrm http port) или 5986 при использовании https? Вам также может понадобиться общедоступный IP-адрес, если вы планируете использовать winrm не из автоматизации Azure. Вы также должны быть в состоянии использовать http, поэтому я думаю, что ошибка, которую вы видите, является общей ошибкой подключения.
Примечание: по умолчанию winrm over http и слушатель должны быть настроены и прослушивать ваши машины. winrm использует шифрование на уровне сообщений, поэтому оно не полностью в открытом виде. Вы можете проверить с помощью:
winrm e winrm/config/listener
Что должно показать слушателю что-то вроде:
Listener [Source="GPO"]
Address = *
Transport = HTTP
Port = 5985
Hostname
Enabled = true
URLPrefix = wsman
CertificateThumbprint
ListeningOn = 1.1.1.1
После того, как вы проверите это, я бы подтвердил, что вы можете подключиться к удаленному компьютеру с помощью winrm со своего компьютера. Вы можете легко сделать это с:
$username = '<admin-user>'
$pass = ConvertTo-SecureString -string '<password>' -AsPlainText -Force
$cred = New-Object -typename System.Management.Automation.PSCredential -argumentlist $username, $pass
Enter-PSSession -ComputerName <public-IP> -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck)
Обратите внимание, что вам может потребоваться настроить доверенные хосты на своем компьютере, чтобы они доверяли компьютеру Azure для создания сеанса winrm. Это можно сделать с помощью чего-то вроде:Set-Item WSMan:localhost\Client\TrustedHosts -value * -Force
Обратите внимание, что для безопасности следует использовать фактическое имя виртуальной машины Azure, а не подстановочный знак.