如何从 Azure Function 自动登录 Azure VM?

如何从 Azure Function 自动登录 Azure VM?

我有一个应用程序,它需要一个网站能够进行 HTTP 调用,从而打开并登录 Azure VM。我正在尝试使用 PowerShell Azure 函数执行此操作。我可以使用以下函数成功打开/关闭 VM:

$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

使用标准远程桌面 GUI 登录时,我还需要关闭证书提示。我需要做什么才能使用 Azure 函数自动登录?

该虚拟机正在运行 Windows 10。

编辑:我已设置端口、制作本地证书,并确保已设置 WinRM 以在 VM 上进行远程管理,并且它正在监听 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

答案1

我无法让 Invoke-Command 在 Azure RM VM 上工作。最终的解决方案(现已成功实施)是在 Azure 自动化帐户中使用 Invoke-AzureRmVMRunCommand。感兴趣的人请注意:目前,Azure Powershell 函数仅支持 AzureRM 版本 1,不支持 Invoke-AzureRmVMRunCommand(即使作为导入的模块),但 Azure 自动化运行良好。

答案2

首先,您是否确保您的 NSG 规则允许 WINRM 流量入站到该机器?

另外,您的 Enter-PsSession 命令是错误的。您的 -connectionURI 应该只是计算机的公共 IP 或名称,没有 https,然后您需要使用 -useSSL 标志。

答案3

您应该在 Azure VM 上启用 winrm 服务,此外,如果您想从 Azure 功能登录,您应该将 winrm 服务设置为监听 5986(https)。Http 不起作用。

首先,您应该在 VM 防火墙和 Azure NSG 上打开端口 5986。

其次,您需要创建一个证书。

第三,配置WinRM监听5986。

有关此内容的更多信息,请参阅博客

答案4

使用您的凭证,指定虚拟机名称作为用户名的一部分。例如,如果您的机器名称是 vm1 并且您的用户是 myusername,那么您的凭证将如下所示。

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

相关内容