Como efetuar login na VM do Azure automaticamente a partir da função do Azure?

1

Eu tenho um aplicativo que requer um site para fazer uma chamada HTTP que ativa e efetua login em uma VM do Azure. Eu estou tentando fazer isso com uma função do PowerShell do Azure. Eu posso ligar / desligar a VM com a função, usando:

$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

Mas estou recebendo permissão negada erros ao tentar efetuar login na VM. Eu tentei os seguintes métodos:

$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

e

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

Ao efetuar login com a GUI padrão da área de trabalho remota, também preciso dispensar os prompts de certificado. O que preciso fazer para efetuar login automaticamente usando uma função do Azure?

A VM está executando o Windows 10.

EDIT: Configurei as portas, criei um certificado local e certifiquei-me de que o WinRM fosse configurado para gerenciamento remoto na VM, e também que ele estivesse escutando em HTTPS. No entanto, quando tento o comando na minha máquina local:

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

Eu recebo o erro:

Enter-PSSession : Connecting to remote server 52.166.161.93 failed with the following error message : The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is acce pting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination is the WinRM service, run the following command on the destination to analyze and configure the WinRM service: "winrm quickconfig". For more information, see the about_Remote_Troubleshooting Help topic.

EDIT: verifiquei que a porta está aberta e acessível a partir da função do Azure usando

New-Object Net.Sockets.TcpClient "<public-ip>", 5986
    
por Loz 22.01.2018 / 15:15

4 respostas

1

Eu nunca consegui chamar o Invoke-Command para a VM do Azure RM. A solução de trabalho no final, agora implementada com êxito, está usando o Invoke-AzureRmVMRunCommand em uma conta do Azure Automation. Observação para as partes interessadas: no momento, as funções do Azure Powershell suportam apenas a versão 1 do AzureRM, que não suporta Invoke-AzureRmVMRunCommand (nem mesmo como um módulo importado), mas a automação do Azure funciona muito bem.

    
por 02.02.2018 / 16:17
1

Primeiramente, você certificou-se de que as regras do NSG permitem o tráfego de entrada do WINRM para essa máquina?

Além disso, seu comando Enter-PsSession está errado. Your -connectionURI deve ser apenas o IP público ou o nome da máquina, não https e, em seguida, você precisa usar o sinalizador -useSSL.

    
por 22.01.2018 / 21:49
0

Você deve habilitar o serviço winrm em sua VM do Azure, também, se você quiser fazer o login da função do Azure, você deve definir o serviço winrm ouvir em 5986 (https). Http não está funcionando.

Primeiro, você deve abrir a porta 5986 no firewall da VM e no NSG do Azure.

Em segundo lugar, você precisa criar um certificado.

Em terceiro lugar, configure o WinRM para escutar em 5986.

Mais informações sobre isso, consulte este blog .

    
por 23.01.2018 / 03:42
0

Com sua credencial, especifique o nome da VM como parte do nome de usuário. ou seja, se o nome da sua máquina for vm1 e seu usuário for myusername, sua credencial será a seguinte.

$cred= New-Object System.Management.Automation.PSCredential ("vm1\myUsername", $password )
    
por 16.03.2018 / 21:31