Как автоматически войти в Azure VM из Azure Function?

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

$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

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

На ВМ установлена Windows 10.

EDIT: Я настроил порты, создал локальный сертификат и убедился, что WinRM настроен для удаленного управления на ВМ, а также что он прослушивает HTTPS. Однако, когда я пытаюсь выполнить команду на локальной машине:

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

Я получаю ошибку:

Enter-PSSession : Connecting to remote server 52.166.161.93 failed со следующим сообщением об ошибке: Клиент не может подключиться к назначению, указанному в запросе. Убедитесь, что служба на работает и принимает запросы. Обратитесь к журналам и документацию по службе WS-Management, запущенной на месте назначения. назначения, чаще всего IIS или WinRM. Если местом назначения является WinRM, выполните следующую команду на месте назначения для анализа и настройки службы WinRM: "winrm quickconfig". Для получения дополнительной информации см. в справочной теме about_Remote_Troubleshooting.

EDIT: Я проверил, что порт открыт и доступен из Azure Function с помощью

New-Object Net.Sockets.TcpClient "<public-ip>", 5986
2
задан 25 January 2018 в 13:33
4 ответа

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

2
ответ дан 3 December 2019 в 10:34

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

$cred= New-Object System.Management.Automation.PSCredential ("vm1\myUsername", $password )
0
ответ дан 3 December 2019 в 10:34

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

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

.
1
ответ дан 3 December 2019 в 10:34

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

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

Во-вторых, вам нужно создать cert.

Третье, настроить WinRM на прослушивание на 5986.

Больше информации об этом, пожалуйста, смотрите в этом блоге.

.
0
ответ дан 3 December 2019 в 10:34

Теги

Похожие вопросы