Usar herramientas remotas para solucionar problemas de vm de Azure

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

Consola serie

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

CMD remoto

Descargue PsExec. Conectar a la máquina virtual ejecutando el siguiente comando:

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

Nota

  • El comando debe ejecutarse en un equipo que se encuentra en la misma red virtual.
  • DIP o HostName se pueden usar para reemplazar <computer>.
  • El parámetro -s se asegura de que el comando se invoca mediante cuenta del sistema (permiso de administrador).
  • PsExec usa los puertos TCP 135 y 445. Como resultado, los dos puertos deben estar abiertos en el firewall.

Comando Ejecutar

Para obtener más información acerca de cómo usar la característica de comando ejecutar para ejecutar scripts en la máquina virtual, vea Ejecutar scripts de PowerShell en la máquina virtual de Windows con el comando run.

Extensión de script personalizado

Puede usar la característica Extensión de script personalizada para ejecutar un script personalizado en la máquina virtual de destino. Para usar esta característica, deben cumplirse las siguientes condiciones:

  • La máquina virtual tiene conectividad.

  • Azure Virtual Machine Agent está instalado y funciona según lo esperado en la máquina virtual.

  • La extensión no se instaló previamente en la máquina virtual.

    La extensión inserta el script solo la primera vez que se usa. Si usa esta característica más adelante, la extensión reconoce que ya se usó y no carga el nuevo script.

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

Para máquinas virtuales de modelo de implementación clásica

Importante

Las VM 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 más información, consulte Migre 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 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 usar 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 obtener más información, vea Grupos de seguridad.

Para las máquinas virtuales de RDFE, debe tener un extremo que tenga un puerto privado (5986) y un puerto público. A continuación, también debe abrir ese puerto de acceso público en el NSG.

Configurar el equipo cliente

Para usar PowerShell para conectarse a la máquina virtual de forma remota, primero debe configurar el equipo cliente para permitir la conexión. Para ello, agregue la máquina virtual a la lista de hosts de confianza de PowerShell ejecutando el siguiente comando, según corresponda.

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

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

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

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

Para agregar todos los equipos a la lista de hosts de confianza:

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

Habilitar RemotePS en la máquina virtual

Para las máquinas virtuales creadas con el modelo de implementación clásica, use 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, use 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.

Conéctese a la máquina virtual

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

  • Fuera de la red virtual o implementación

    • Para una máquina virtual creada con el modelo de implementación 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, primero agregue un nombre DNS a la dirección IP pública. Para obtener pasos detallados, consulte Create a fully qualified domain name in the Azure Portal for a Windows VM. A continuación, 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 implementación, ejecute el siguiente comando:

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

Nota

Al establecer la marca SkipCaCheck se omite el requisito de importar un certificado a la máquina virtual al iniciar la sesión.

También puede usar el cmdlet Invoke-Command para ejecutar un script en la máquina virtual de forma remota.

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

Registro remoto

Nota

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

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

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

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

  2. Seleccione Archivo > Conectar registro de red.

    Captura de pantalla del Conectar de red... opción en el menú Archivo del Editor del Registro

  3. Busque la máquina virtual de destino por nombre de host o IP dinámica (preferiblemente) si la escribe en el cuadro Escribir el nombre del objeto que se va a seleccionar .

    Captura de pantalla del cuadro Escribir el nombre del objeto que se debe seleccionar en el cuadro de diálogo Seleccionar equipo.

  4. Escriba 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 usar esta opción.

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

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

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

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

  3. Seleccione Conectarse a otro equipo.

    Captura de pantalla de Conectar a otro equipo en el menú contextual de Servicios (local).

  4. Escriba la DIRECCIÓN IP dinámica de la máquina virtual de destino.

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

  5. Realice los cambios necesarios en los servicios.

Siguientes pasos

  • Para obtener más información acerca del cmdlet Enter-PSSession, vea Enter-PSSession.
  • Para obtener más información acerca de la extensión de script personalizado para Windows el modelo de implementación clásica, vea Custom Script Extension for Windows.
  • PsExec forma parte de PSTools Suite.
  • Para obtener más información acerca de PSTools Suite, consulta PSTools.