Назад | Перейти на главную страницу

Как автоматически войти в виртуальную машину Azure из функции Azure?

У меня есть приложение, для которого требуется, чтобы веб-сайт мог выполнять HTTP-вызов, который включается и выполняет вход в виртуальную машину Azure. Я пытаюсь сделать это с помощью функции PowerShell Azure. Я могу успешно включить / выключить виртуальную машину с помощью этой функции, используя:

$secpasswd = ConvertTo-SecureString $env:SP_PASSWORD -AsPlainText -Force;
$mycreds = New-Object System.Management.Automation.PSCredential ($env:SP_USERNAME, $secpasswd)
Add-AzureRmAccount -ServicePrincipal -Tenant $env:TENANTID -Credential $mycreds;
$context = Get-AzureRmContext;
Set-AzureRmContext -Context $context;
# Start VM
Start-AzureRmVM -ResourceGroupName myResourceGroup -Name  myDevice | Out-String

Но при попытке войти в виртуальную машину я получаю сообщения об ошибках в разрешении. Я пробовал следующие методы:

$password = ConvertTo-SecureString "myPassword" -AsPlainText -Force
$cred= New-Object System.Management.Automation.PSCredential ("myUsername", $password )

#Enter-PSSession -ConnectionUri https://<public_ip> -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck) -Authentication Negotiate

и

$Server="<public_ip>"
$User="myUsername"
$Password="myPassword"
cmdkey /generic:TERMSRV/$Server /user:$User /pass:$Password
mstsc /v:$Server

При входе в систему с помощью стандартного графического интерфейса удаленного рабочего стола мне также нужно отклонить запросы сертификата. Что мне нужно сделать для автоматического входа в систему с помощью функции Azure?

Виртуальная машина работает под управлением Windows 10.

РЕДАКТИРОВАТЬ: я настроил порты, создал локальный сертификат и убедился, что WinRM настроен для удаленного управления на виртуальной машине, а также что он прослушивает HTTPS. Однако, когда я пытаюсь выполнить команду на своем локальном компьютере:

Enter-PSSession -ComputerName 52.166.161.93 -Credential $cred -UseSSL -SessionOption $so

Я получаю сообщение об ошибке:

Enter-PSSession: не удалось подключиться к удаленному серверу 52.166.161.93, появляется следующее сообщение об ошибке: клиент не может подключиться к месту назначения, указанному в запросе. Убедитесь, что служба в пункте назначения работает и принимает запросы. Просмотрите журналы и документацию для службы WS-Management, работающей в месте назначения, чаще всего IIS или WinRM. Если местом назначения является служба WinRM, выполните следующую команду в месте назначения, чтобы проанализировать и настроить службу WinRM: «winrm quickconfig». Для получения дополнительных сведений см. Раздел справки about_Remote_Troubleshooting.

РЕДАКТИРОВАТЬ: я убедился, что порт открыт и доступен из функции Azure с помощью

New-Object Net.Sockets.TcpClient "<public-ip>", 5986

Я никогда не мог заставить Invoke-Command работать на виртуальной машине Azure RM. В конечном итоге рабочее решение, которое теперь успешно реализовано, использует Invoke-AzureRmVMRunCommand в учетной записи службы автоматизации Azure. Примечание для заинтересованных сторон: в настоящее время функции Azure Powershell поддерживают только AzureRM версии 1, которая не поддерживает Invoke-AzureRmVMRunCommand (даже в качестве импортированного модуля), но автоматизация Azure работает очень хорошо.

Во-первых, удостоверились ли вы, что ваши правила NSG разрешают входящий трафик WINRM на этот компьютер?

Кроме того, ваша команда Enter-PsSession неверна. Ваш -connectionURI должен быть просто общедоступным IP-адресом или именем машины, без https, а затем вам нужно использовать флаг -useSSL.

С вашими учетными данными укажите имя виртуальной машины как часть имени пользователя. т.е. если имя вашего компьютера - vm1, а ваш пользователь - myusername, ваши учетные данные будут выглядеть следующим образом.

$cred= New-Object System.Management.Automation.PSCredential ("vm1\myUsername", $password )

Вам следует включить службу winrm на своей виртуальной машине Azure, а также, если вы хотите войти в систему из функции Azure, вы должны установить прослушивание службы Winrm на 5986 (https). Http не работает.

Во-первых, вы должны открыть порт 5986 на брандмауэре виртуальной машины и Azure NSG.

Во-вторых, вам нужно создать сертификат.

В-третьих, настройте WinRM для прослушивания 5986.

Подробнее об этом см. Здесь блог.