Uso de herramientas remotas para solucionar problemas de máquina virtual de Azure

Applies to: ✔️ máquinas virtuales de Windows

Resumen

Al solucionar problemas en una máquina virtual (VM) de Azure, puede conectarse a la máquina virtual mediante las herramientas remotas que se describen en este artículo en lugar de usar el protocolo Escritorio remoto (RDP).

Consola de serie

Use una consola serial para Azure Virtual Machines para ejecutar comandos en la máquina virtual remota de Azure.

CMD remoto

Descargar PsExec. Conéctese a la VM ejecutando el siguiente comando:

psexec \\<computer>-u user -s cmd

Nota:

  • El comando debe ejecutarse en un ordenador que esté en la misma red virtual.
  • Se puede utilizar DIP o HostName para sustituir a <ordenador>.
  • El parámetro -s asegura que el comando sea invocado utilizando la Cuenta del Sistema (permiso de administrador).
  • PsExec utiliza los puertos TCP 135 y 445. Como resultado, los dos puertos tienen que estar abiertos en el cortafuegos.

Ejecute el comando

Para obtener más información sobre cómo usar la característica ejecutar comandos para ejecutar scripts en la máquina virtual, consulte Run PowerShell scripts in your Windows VM with run command.

Extensión de script personalizada

Puede utilizar la función Extensión de script personalizada para ejecutar un script personalizado en la VM de destino. Para utilizar esta función, deben cumplirse las siguientes condiciones:

  • La máquina virtual tiene conectividad.

  • Azure agente de máquina virtual está instalado y funciona según lo previsto en la máquina virtual.

  • La extensión no estaba previamente instalada en la máquina virtual.

    La extensión inyecta el script sólo la primera vez que se utiliza. Si utilizas esta función más tarde, la extensión reconoce que ya fue utilizada y no carga el nuevo script.

Sube tu script a una cuenta de almacenamiento, y genera su propio contenedor. A continuación, ejecute el siguiente script en Azure PowerShell en un equipo que tenga conectividad con la máquina virtual.

Para máquinas virtuales de Azure Resource Manager

#Set up the basic variables.
$subscriptionID = "<<SUBSCRIPTION ID>>"
$storageAccount = "<<STORAGE ACCOUNT>>"
$storageRG = "<<RESOURCE GROUP OF THE STORAGE ACCOUNT>>" 
$localScript = "<<FULL PATH OF THE PS1 FILE TO EXECUTE ON THE VM>>" 
$blobName = "file.ps1" #Name you want for the blob in the storage.
$vmName = "<<VM NAME>>" 
$vmResourceGroup = "<<RESOURCE GROUP>>"
$vmLocation = "<<DATACENTER>>" 
 
#Set up the Azure PowerShell module, and ensure the access to the subscription.
Login-AzAccount #Ensure login with the account associated with the subscription ID.
Get-AzSubscription -SubscriptionId $subscriptionID | Select-AzSubscription

#Set up the access to the storage account, and upload the script.
$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageRG -Name $storageAccount).Value[0]
$context = New-AzureStorageContext -StorageAccountName $storageAccount -StorageAccountKey $storageKey
$container = "cse" + (Get-Date -Format yyyyMMddhhmmss)
New-AzureStorageContainer -Name $container -Permission Off -Context $context
Set-AzureStorageBlobContent -File $localScript -Container $container -Blob $blobName  -Context $context

#Push the script into the VM.
Set-AzVMCustomScriptExtension -Name "CustomScriptExtension" -ResourceGroupName $vmResourceGroup -VMName $vmName -Location $vmLocation -StorageAccountName $storageAccount -StorageAccountKey $storagekey -ContainerName $container -FileName $blobName -Run $blobName

PowerShell remoto

Nota:

El puerto TCP 5986 (HTTPS) debe estar abierto para poder utilizar esta opción.

Para las VMs de Azure Resource Manager, debe abrir el puerto 5986 en el grupo de seguridad de red (NSG). Para más información, consulte Grupos de seguridad.

Para las máquinas virtuales RDFE, debe tener un punto final que tenga un puerto privado (5986) y un puerto público. Entonces, también tienes que abrir ese puerto expuesto al público en el NSG.

Configurar el ordenador cliente

Para utilizar PowerShell para conectarse a la máquina virtual de forma remota, primero tiene que configurar el equipo cliente para permitir la conexión. Para ello, añada la VM a la lista de hosts de confianza de PowerShell ejecutando el siguiente comando, según corresponda.

Para añadir una máquina virtual a la lista de hosts de confianza:

Set-Item wsman:\localhost\Client\TrustedHosts -value <ComputerName>

Para añadir varias máquinas virtuales a la lista de hosts de confianza:

Set-Item wsman:\localhost\Client\TrustedHosts -value <ComputerName1>,<ComputerName2>

Para añadir todos los ordenadores a la lista de hosts de confianza:

Set-Item wsman:\localhost\Client\TrustedHosts -value *

Habilitar RemotePS en la VM

Para las máquinas virtuales creadas mediante el modelo de despliegue clásico, utilice la extensión de script personalizada para ejecutar el siguiente script:

Enable-PSRemoting -Force
New-NetFirewallRule -Name "Allow WinRM HTTPS" -DisplayName "WinRM HTTPS" -Enabled True -Profile Any -Action Allow -Direction Inbound -LocalPort 5986 -Protocol TCP
$thumbprint = (New-SelfSignedCertificate -DnsName $env:COMPUTERNAME -CertStoreLocation Cert:\LocalMachine\My).Thumbprint
$command = "winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=""$env:computername""; CertificateThumbprint=""$thumbprint""}"
cmd.exe /C $command

Para las VMs de Azure Resource Manager, use los comandos de ejecución desde el portal para ejecutar el script EnableRemotePS:

Captura de pantalla de los pasos para ejecutar el script EnableRemotePS desde el portal.

Conexión a la máquina virtual

Ejecute el siguiente comando en función de la ubicación del ordenador cliente:

  • Fuera de la red virtual o del despliegue

    • Para una VM creada utilizando el modelo de despliegue clásico, ejecute el siguiente comando:

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName  "<<CLOUDSERVICENAME.cloudapp.net>>" -port "<<PUBLIC PORT NUMBER>>" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
    • Para una máquina virtual de Azure Resource Manager, agregue primero un nombre DNS a la dirección IP pública. Para obtener pasos detallados, consulte Crear un nombre de dominio completo en el portal de Azure para una máquina virtual de Windows. Ejecute el siguiente comando:

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName "<<DNSname.DataCenter.cloudapp.azure.com>>" -port "5986" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
  • Dentro de la red virtual o despliegue, ejecute el siguiente comando:

    $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
    Enter-PSSession -ComputerName  "<<HOSTNAME>>" -port 5986 -Credential (Get-Credential) -useSSL -SessionOption $Skip
    

Nota:

Si se configura la marca SkipCaCheck, se omite el requisito de importar un certificado a la VM al iniciar la sesión.

También puede utilizar el cmdlet Invoke-Command para ejecutar un script en la VM de forma remota.

Invoke-Command -ComputerName "<<COMPUTERNAME>" -ScriptBlock {"<<SCRIPT BLOCK>>"}

Registro remoto

Nota:

El puerto TCP 135 o 445 debe estar abierto para poder utilizar esta opción.

Para máquinas virtuales de Azure Resource Manager, debe abrir el puerto 5986 en el NSG (grupo de seguridad de red). Para más información, consulte Grupos de seguridad.

Para las máquinas virtuales RDFE, debe tener un punto de conexión que tenga un puerto privado 5986 y un puerto público. También tienes que abrir ese puerto público en el NSG.

  1. Desde otra máquina virtual en la misma red virtual, abra el editor del registro (regedit.exe).

  2. Seleccione Archivo>Conectar registro de red.

    Captura de pantalla de la opción Conectar Registro de Red... del menú Archivo del Editor del Registro

  3. Localice la VM de destino por nombre de host o IP dinámica (preferible) introduciéndola en la casilla Introduzca el nombre del objeto a seleccionar.

    Captura de pantalla del cuadro Escriba el nombre de objeto para seleccionar en el cuadro de diálogo Seleccionar equipo.

  4. Introduzca las credenciales de la máquina virtual de destino.

  5. Realice los cambios necesarios en el registro.

Consola de servicios remotos

Nota:

Los puertos TCP 135 o 445 deben estar abiertos para poder utilizar esta opción.

Para las máquinas virtuales de Azure Resource Manager, debe abrir el puerto 5986 en el grupo de seguridad de red. Para más información, consulte Grupos de seguridad.

Para las máquinas virtuales RDFE, debe tener un punto de conexión que tenga un puerto privado 5986 y un puerto público. También tienes que abrir ese puerto público en el NSG.

  1. Desde otra máquina virtual en la misma red virtual, abra una instancia de Services.msc.

  2. Haga clic con el botón derecho en Servicios (local).

  3. Seleccione Conectarse a otro equipo.

    Captura de pantalla de la opción Conectarse a otro ordenador en el menú contextual de Servicios (Local).

  4. Introduzca la IP dinámica de la máquina virtual de destino.

    Captura de pantalla del cuadro de entrada de IP dinámica de la opción Otro equipo del cuadro de diálogo Seleccionar equipo.

  5. Realice los cambios necesarios en los servicios.

Pasos siguientes