Compartir a través de


Utilizar herramientas remotas para solucionar problemas de Azure VM

Cuando solucione problemas en una máquina virtual (VM) de Azure, puede conectarse a la VM utilizando las herramientas remotas que se tratan en este artículo en lugar de utilizar el Protocolo de Escritorio Remoto (RDP).

Consola serie

Utilice una consola serie para máquinas virtuales Azure para ejecutar comandos en la máquina virtual Azure remota.

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.

Ejecutar comando

Para obtener más información sobre cómo utilizar la función de comando de ejecución para ejecutar scripts en la VM, consulte Ejecutar scripts de PowerShell en su VM de Windows con comando de ejecución.

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 Virtual Machine Agent está instalado y funciona como se espera 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 la siguiente secuencia de comandos en Azure PowerShell en un equipo que tenga conectividad con la máquina virtual.

Para las máquinas virtuales del modelo de despliegue clásico

Importante

Las MV clásicas se retirarán el 1 de marzo de 2023.

Si usa recursos de IaaS de ASM, complete su migración antes del 1 de marzo de 2023. Le recomendamos que haga el cambio antes para aprovechar las numerosas mejoras de funciones de Azure Resource Manager.

Para obtener más información, consulte Migrar sus recursos de IaaS a Azure Resource Manager antes del 1 de marzo de 2023.

#Set up the basic variables.
$subscriptionID = "<<SUBSCRIPTION ID>>" 
$storageAccount = "<<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>>" 
$vmCloudService = "<<CLOUD SERVICE>>" #Resource group or cloud service where the VM is hosted. For example, for "demo305.cloudapp.net" the cloud service is going to be demo305.

#Set up the Azure PowerShell module, and ensure the access to the subscription.
Import-Module Azure
Add-AzureAccount  #Ensure login with the account associated with the subscription ID.
Get-AzureSubscription -SubscriptionId $subscriptionID | Select-AzureSubscription

#Set up the access to the storage account, and upload the script.
$storageKey = (Get-AzureStorageKey -StorageAccountName $storageAccount).Primary
$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.
$vm = Get-AzureVM -ServiceName $vmCloudService -Name $vmName
Set-AzureVMCustomScriptExtension "CustomScriptExtension" -VM $vm -StorageAccountName $storageAccount -StorageAccountKey $storagekey -ContainerName $container -FileName $blobName -Run $blobName | Update-AzureVM

Para las VM 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 máquinas virtuales 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 de cara 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 máquinas virtuales de Azure Resource Manager, utilice los comandos de ejecución del portal para ejecutar el script EnableRemotePS:

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

Conéctese 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 Azure Resource Manager, añada 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 VM de Windows. Después, 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 las máquinas virtuales de Azure Resource Manager, debe abrir el puerto 5986 en el NSG. 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 del 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 NSG. 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

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.