Utilizar herramientas remotas para solucionar problemas de Azure VM
Se aplica a: ✔️ Máquinas virtuales de Windows
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 de 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.
Ejecute el 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 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:
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 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. 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.
Desde otra máquina virtual en la misma red virtual, abra el editor del registro (regedit.exe).
Seleccione Archivo>Conectar registro de red.
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.
Introduzca las credenciales de la máquina virtual de destino.
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.
Desde otra máquina virtual en la misma red virtual, abra una instancia de Services.msc.
Haga clic con el botón derecho en Servicios (local).
Seleccione Conectarse a otro equipo.
Introduzca la IP dinámica de la máquina virtual de destino.
Realice los cambios necesarios en los servicios.
Pasos siguientes
- Para obtener más información sobre el cmdlet Enter-PSSession, consulte Enter-PSSession.
- Para obtener más información sobre la Extensión de script personalizada para Windows mediante el modelo de implantación clásico, consulte Extensión de script personalizada para Windows.
- PsExec forma parte de PSTools Suite.
- Para obtener más información sobre PSTools Suite, consulte el artículo PSTools.
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.