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, а не подстановочный знак.

Другие вопросы по тегам