Azure 自动化帐户 PS 远程进入 Azure VM

Azure Automation Account PS Remote into Azure VM

我正在尝试检查 Azure VM 中的一些 Windows 服务,使用具有托管标识的自动化帐户,使用 Powershell 脚本。

基本上我正在尝试使用 New-PSsession -computerName VM1 命令

$VMS = @('VMINT01p', 'VMINT02p', 'VMINT03p', 'VMINT04p')

Foreach ($VM in $VMS)
{
    $testSession = New-PSsession -ComputerName $VM -ErrorAction Stop
    if(-not($testSession))
    {
        write-host "Failed to connect to $VM"
        Throw "Unable to remote..."
    }
    else 
    {
        write-host "Connected to $VM"
        
    }
    
}

但我收到以下错误:

System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server 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.

我已经为自动化帐户提供了托管身份 虚拟机管理员登录,但我想知道这是否是让它与自动化帐户一起使用的正确权限。

我可以 运行 我自己的凭据下的这个脚本,但我在 indows 中拥有管理员组权限 OS。

希望您使用 PowerShell 连接 Azure VM 的方式正确。

如果您遵循相同的步骤,请检查以下步骤一次:

先决条件

# Install AzureRM PowerShell module  to connect to Azure VMs
Install-Module AzureRM

# Verify the WinRM service is running on your local machine
Start-Service WinRM

# Add the VM's public IP address to the trusted hosts of the local machine
Set-Item WSMan:\<localhost>\Client\TrustedHosts -Value <Public IP address of the VM>

打开网络安全组中的端口

打开您的 WinRM(Windows 远程管理)HTTPHTTPS NSG 上的端口与 VM 关联。

检索 NSG 以添加规则的命令如下:

Get-AzureRmNetworkSecurityGroup -Name <NSGNAME> -ResourceGroupName <ResourceGroupName>

添加 NSG 配置规则以连接 VM

Add-AzureRmNetworkSecurityRuleConfig -Name AllowingWinRMHTTPS -Description "To Enable PowerShell Remote Access" -Access <Allow/Deny> -Protocol <Protocal_type = Tcp> -Direction <Inbound/Outbound> -Priority <102> -SourceAddressPrefix <SrcAddPrefix = Internet> -SourcePortRange <port range = *> -DestinationAddressPrefix <DestAddPrefix = *>  DestinationPortRange <Port you want to use 5986>

在 NSG 中保存规则

Set-AzureRmNetworkSecurityGroup

使用 PowerShell 访问虚拟机

  • 在 VM
  • 上启用 WinRM
  • 在 VM 上打开所需的 WinRM 防火墙端口(如果本地 Windows 防火墙已激活)。

在本地创建一个空的 PowerShell 脚本

    New-Item -ItemType File -Path C:\<fileName>.ps1

Add/Store 文件中您要在 VM 中执行的任务。

    $Content = "winrm qc /force
    
    netsh advfirewall firewall add rule name= WinRMHTTP dir=in action=allow protocol=TCP localport=5985
    
    netsh advfirewall firewall add rule name= WinRMHTTPS dir=in action=allow protocol=TCP localport=5986"

向 PowerShell 脚本添加任务

    Add-Content C:\<fileName>.ps1 $Content
使用 VM运行Command.

的 VM 内的

运行 脚本

    Invoke-AzureRmVMRunCommand -ResourceGroupName <ResourceGroupName> -Name <name> -CommandId 'RunPowerShellScript' -ScriptPath C:\<fileName>.ps1

删除脚本(因为我们不再需要它了)

    Remove-Item C:\<fileName>.ps1

使用 PowerShell 连接到虚拟机

从这里您可以连接虚拟机。

    Enter-PSSession -ComputerName <The public IP address of the VM>

参考here了解更多信息。

PowerShell 连接虚拟机 Azure PSRemoting