Share via


Usa gli strumenti remoti per risolvere i problemi relativi alle macchine virtuali di Azure

Quando si risolvono i problemi in una macchina virtuale (VM) di Azure, è possibile connettersi alla macchina virtuale usando gli strumenti remoti descritti in questo articolo invece di usare il protocollo RDP (Remote Desktop Protocol).

Consolle seriale

Utilizzare una console seriale per macchine virtuali di Azure per eseguire i comandi nella macchina virtuale di Azure remota.

CMD remoto

Scarica PsExec. Connettiti alla VM eseguendo il seguente comando:

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

Nota

  • Il comando deve essere eseguito in un computer che si trova nella stessa rete virtuale.
  • DIP o HostName possono essere utilizzati per sostituire il <computer>.
  • Il parametro -s assicura che il comando venga richiamato utilizzando l'account di sistema (autorizzazione di amministratore).
  • PsExec utilizza le porte TCP 135 e 445. Di conseguenza, le due porte devono essere aperte sul firewall.

Esegui comando

Per ulteriori informazioni su come utilizzare la funzionalità di esecuzione del comando per eseguire gli script sulla macchina virtuale, vedere Eseguire gli script di PowerShell nella macchina virtuale Windows con il comando di esecuzione.

Estensione per script personalizzati

È possibile usare la funzionalità Estensione script personalizzata per eseguire uno script personalizzato nella macchina virtuale di destinazione. Per utilizzare questa funzione, devono essere soddisfatte le seguenti condizioni:

  • La VM dispone di connettività.

  • L'agente per macchine virtuali di Azure è installato e funziona come previsto nella macchina virtuale.

  • L'estensione non è stata precedentemente installata nella VM.

    L'estensione inserisce lo script solo la prima volta che viene utilizzato. Se utilizzi questa funzione in un secondo momento, l'estensione riconosce che è già stata utilizzata e non carica il nuovo script.

Carica lo script in un account di archiviazione e genera il relativo contenitore. Eseguire quindi lo script seguente in Azure PowerShell in un computer con connettività alla macchina virtuale.

Per le macchine virtuali del modello di distribuzione classica

Importante

Le macchine virtuali classiche verranno ritirate il 1° settembre 2023

Se si utilizzano risorse IaaS da ASM, completare la migrazione entro il 1° settembre 2023. Ti invitiamo a effettuare il passaggio prima per sfruttare i numerosi miglioramenti delle funzionalità in Azure Resource Manager.

Per ulteriori informazioni, consultare Migrazione delle risorse IaaS in Azure Resource Manager entro il 1° settembre 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

Per le macchine virtuali di 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

Remote PowerShell

Nota

La porta TCP 5986 (HTTPS) deve essere aperta per poter utilizzare questa opzione.

Per le macchine virtuali di Azure Resource Manager è necessario aprire la porta 5986 nel gruppo di sicurezza di rete (NSG). Per ulteriori informazioni, consulta Gruppi di sicurezza.

Per le macchine virtuali RDFE, è necessario disporre di un endpoint con una porta privata (5986) e una porta pubblica. Quindi, devi anche aprire quella porta pubblica sul gruppo di sicurezza di rete.

Configurare il computer client

Per utilizzare PowerShell per connettersi alla macchina virtuale in remoto, devi prima configurare il computer client per consentire la connessione. A tale scopo, aggiungi la macchina virtuale all'elenco degli host attendibili di PowerShell eseguendo il comando seguente, a seconda dei casi.

Per aggiungere una macchina virtuale all'elenco degli host attendibili:

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

Per aggiungere più macchine virtuali all'elenco degli host attendibili:

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

Per aggiungere tutti i computer all'elenco degli host attendibili:

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

Abilitare RemotePS sulla macchina virtuale

Per le macchine virtuali create utilizzando il modello di distribuzione classico, utilizzare l'estensione dello script personalizzato per eseguire il seguente 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

Per le macchine virtuali di Azure Resource Manager, usare i comandi di esecuzione dal portale per eseguire lo script EnableRemotePS:

                                            Screenshot dei passaggi per eseguire lo script EnableRemotePS dal portale.                                                           

Connettersi alla macchina virtuale

Eseguire il seguente comando in base alla posizione del computer client:

  • All'esterno della rete virtuale o della distribuzione

    • Per una macchina virtuale creata utilizzando il modello di distribuzione classico, eseguire il seguente comando:

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName  "<<CLOUDSERVICENAME.cloudapp.net>>" -port "<<PUBLIC PORT NUMBER>>" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
    • Per una macchina virtuale di Azure Resource Manager, aggiungere innanzitutto un nome DNS all'indirizzo IP pubblico. Per i passaggi dettagliati, vedere Creare un nome di dominio completo nel portale di Azure per una macchina virtuale Windows. Quindi, esegui il seguente comando:

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName "<<DNSname.DataCenter.cloudapp.azure.com>>" -port "5986" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
  • All'interno della rete virtuale o della distribuzione eseguire il comando seguente:

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

Nota

L'impostazione del flag SkipCaCheck ignora il requisito di importare un certificato nella macchina virtuale all'avvio della sessione.

È inoltre possibile utilizzare il cmdlet Invoke-Command per eseguire uno script nella macchina virtuale in remoto.

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

Registro remoto

Nota

La porta TCP 135 o 445 deve essere aperta per utilizzare questa opzione.

Per le macchine virtuali di Azure Resource Manager è necessario aprire la porta 5986 nel gruppo di sicurezza di rete. Per ulteriori informazioni, consulta Gruppi di sicurezza.

Per le macchine virtuali RDFE, è necessario disporre di un endpoint con una porta privata 5986 e una porta pubblica. Devi anche aprire quella porta pubblica sul gruppo di sicurezza di rete.

  1. Da un'altra macchina virtuale nella stessa rete virtuale aprire l'editor del registro (regedit.exe).

  2. Seleziona File>Connetti registro di rete.

                                 Screenshot dell'opzione                                           

  3. Individua la VM di destinazione in base al nome host o all'IP dinamico (preferibile) inserendolo nella casella Inserisci il nome dell'oggetto da selezionare.

                                 Screenshot della casella Immettere il nome dell'oggetto da selezionare nella finestra di dialogo Seleziona computer.                                           

  4. Immettere le credenziali per la macchina virtuale di destinazione.

  5. Apportare le modifiche necessarie al registro.

Console dei servizi remoti

Nota

Le porte TCP 135 o 445 devono essere aperte per utilizzare questa opzione.

Per le macchine virtuali di Azure Resource Manager è necessario aprire la porta 5986 nel gruppo di sicurezza di rete. Per ulteriori informazioni, consulta Gruppi di sicurezza.

Per le macchine virtuali RDFE, è necessario disporre di un endpoint con una porta privata 5986 e una porta pubblica. Devi anche aprire quella porta pubblica sul gruppo di sicurezza di rete.

  1. Da un'altra macchina virtuale nella stessa rete virtuale, apri un'istanza di Services.msc.

  2. Fare clic con il pulsante destro del mouse su Servizi (locale).

  3. Seleziona Connetti a un altro computer.

                                 Screenshot dell'opzione Connetti a un altro computer nel menu di scelta rapida di Servizi (locale).                                           

  4. Immettere l'IP dinamico della macchina virtuale di destinazione.

                                 Screenshot della casella di input dell'IP dinamico nell'opzione Altro computer nella finestra di dialogo Seleziona computer.                                           

  5. Apportare le modifiche necessarie ai servizi.

Passaggi successivi

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.