Dela via


Testa en avbildning av en virtuell dator

I den här artikeln beskrivs hur du testar en virtuell datoravbildning för att säkerställa att den uppfyller de senaste publiceringskraven för Azure Marketplace.

Distribuera en virtuell Azure-dator

Så här distribuerar du en virtuell dator från Azure Compute Gallery -avbildningen (tidigare känt som delat bildgalleri):

  1. Öppna avbildningsversionen av Azure Compute Gallery.
  2. Välj Skapa virtuell dator.
  3. Ange ett virtuellt datornamn och välj en VM-storlek.
  4. Välj Granska + skapa. När valideringen har godkänts väljer du Skapa.

Kommentar

Om du vill skapa en virtuell dator från en vhd-fil följer du anvisningarna nedan under Anslut certifieringsverktyget till en virtuell datoravbildning eller Använda PowerShell för att använda API:et för självtest.

Slutför de här stegen innan du skickar in ditt vm-erbjudande:

Köra valideringar

Det finns två sätt att köra valideringar på den distribuerade avbildningen.

Använda certifieringstestverktyget för Azure Certified

Viktigt!

Om du vill köra certifieringstestverktyget måste Windows Remote Management-tjänsten köras och konfigureras i Windows. Detta ger åtkomst till port 5986. Mer information finns i Installation och konfiguration för Windows Fjärrhantering.

Ladda ned och kör certifieringstestverktyget

Certifieringstestverktyget för Azure Certified körs på en lokal Windows-dator men testar en Azure-baserad virtuell Windows- eller Linux-dator. Den verifierar att avbildningen av den virtuella användardatorn kan användas med Microsoft Azure och att vägledningen och kraven för att förbereda din virtuella hårddisk har uppfyllts.

  1. Ladda ned och installera det senaste certifieringstestverktyget för Azure Certified.
  2. Öppna certifieringsverktyget och välj sedan Starta nytt test.
  3. På skärmen Testinformation anger du ett testnamn för testkörningen.
  4. Välj Plattform för den virtuella datorn, antingen Windows Server (tillåt port 5986 för Windows) eller Linux (tillåt port 22 för Linux). Ditt plattformsalternativ påverkar de återstående alternativen.
  5. Om den virtuella datorn använder den här databastjänsten markerar du kryssrutan Testa för Azure SQL Database .

Ansluta certifieringsverktyget till en VM-avbildning

  1. Välj SSH-autentiseringsläge: Lösenordsautentisering eller nyckelfilautentisering.

  2. Om du använder lösenordsbaserad autentisering anger du värden för den virtuella datorns DNS-namn, användarnamn och lösenord. Du kan också ändra standardnumret för SSH-port.

    Visar valet av vm-testinformation.

  3. Om du använder nyckelfilbaserad autentisering anger du värden för den virtuella datorns DNS-namn, användarnamn och plats för privat nyckel. Du kan också inkludera en lösenfras eller ändra standardnumret för SSH-port.

  4. Ange det fullständigt kvalificerade DNS-namnet för den virtuella datorn (till exempel MyVMName.Cloudapp.net).

  5. Ange användarnamn och lösenord.

    Visar valet av användarnamn och lösenord för den virtuella datorn.

  6. Välj Nästa.

Köra ett certifieringstest

När du har angett parametervärdena för den virtuella datoravbildningen i certifieringsverktyget väljer du Testa anslutning för att skapa en giltig anslutning till den virtuella datorn. När en anslutning har verifierats väljer du Nästa för att starta testet. När testet är klart visas resultaten i en tabell. Kolumnen Status visar (Pass/Fail/Warning) för varje test. Om något av testerna misslyckas är avbildningen inte certifierad. I det här fallet granskar du kraven och felmeddelandena, gör de föreslagna ändringarna och kör testet igen.

När det automatiserade testet har slutförts anger du ytterligare information om den virtuella datorns avbildning på de två flikarna på skärmen Enkät, Allmän utvärdering och Kernelanpassning och väljer sedan Nästa.

På den sista skärmen kan du ange mer information, till exempel SSH-åtkomstinformation för en virtuell Linux-datoravbildning, och en förklaring av misslyckade utvärderingar om du letar efter undantag.

Slutligen väljer du Generera rapport för att ladda ned testresultaten och loggfilerna för de utförda testfallen tillsammans med dina svar på enkäten.

Kommentar

Få utgivare har scenarier där virtuella datorer måste låsas eftersom de har programvara som brandväggar installerade på den virtuella datorn. I det här fallet laddar du ned det certifierade testverktyget här och skickar rapporten till partnercentersupporten.

Använda PowerShell för att använda API:et för självtest

På Linux OS

Anropa API:et i PowerShell:

  1. Generera åtkomsttoken.
  2. Använd kommandot Invoke-WebRequest för att anropa API:et.
  3. Metoden är Post och innehållstypen är JSON, som du ser i följande kodexempel och skärmdump.
  4. Ange brödtextparametrarna i JSON-format.

Följande kommandon genererar en åtkomsttoken:

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/x-www-form-urlencoded")
$body = "grant_type=client_credentials&client_id=$clientId&client_secret=$clientSecret&resource=https%3A%2F%2Fmanagement.core.windows.net"
$response = Invoke-RestMethod "https://login.microsoftonline.com/$tenantId/oauth2/token" -Method 'POST' -Headers $headers -Body $body
$accessToken = $response.access_token

Visar ett skärmexempel för att generera en åtkomsttoken i PowerShell.

Det här exemplet visar ett PowerShell-anrop till API:et (tillåt port 22 när den virtuella datorn skapas):

$accesstoken = "token"
$headers = @{ "Authorization" = "Bearer $accesstoken" }
$DNSName = "<Machine DNS Name>"
$UserName = "<User ID>"
$Password = "<Password>"
$OS = "Linux"
$PortNo = "22"
$CompanyName = "ABCD"
$AppId = "<Application ID>"
$TenantId = "<Tenant ID>"

$body = @{
   "DNSName" = $DNSName
   "UserName" = $UserName
   "Password" = $Password
   "OS" = $OS
   "PortNo" = $PortNo
   "CompanyName" = $CompanyName
   "AppId" = $AppId
   "TenantId" = $TenantId
} | ConvertTo-Json

$body

$uri = "https://isvapp.azurewebsites.net/selftest-vm"

$res = (Invoke-WebRequest -Method "Post" -Uri $uri -Body $body -ContentType "application/json" -Headers $headers).Content


Här är ett exempel på att anropa API:et i PowerShell:

Skärmexempel för att anropa API:et i PowerShell.


Med hjälp av föregående exempel kan du hämta JSON och parsa den för att få följande information:

$resVar = $res | ConvertFrom-Json
$actualresult = $resVar.Response | ConvertFrom-Json

Write-Host "OSName: $($actualresult.OSName)"
Write-Host "OSVersion: $($actualresult.OSVersion)"
Write-Host "Overall Test Result: $($actualresult.TestResult)"

For ($i = 0; $i -lt $actualresult.Tests.Length; $i++) {
   Write-Host "TestID: $($actualresult.Tests[$i].TestID)"
   Write-Host "TestCaseName: $($actualresult.Tests[$i].TestCaseName)"
   Write-Host "Description: $($actualresult.Tests[$i].Description)"
   Write-Host "Result: $($actualresult.Tests[$i].Result)"
   Write-Host "ActualValue: $($actualresult.Tests[$i].ActualValue)"
}


Den här exempelskärmen, som visar $res.Content, visar information om dina testresultat i JSON-format:

Skärmexempel för att anropa API:et i PowerShell med information om testresultat.


Här är ett exempel på JSON-testresultat som visas i ett JSON-visningsprogram online (till exempel Code Beautify eller JSON Viewer).

Fler testresultat i ett JSON-visningsprogram online.

I Windows OS

Anropa API:et i PowerShell:

  1. Använd kommandot Invoke-WebRequest för att anropa API:et.
  2. Metoden är Post och innehållstypen är JSON, enligt följande kodexempel och exempelskärm.
  3. Skapa brödtextparametrarna i JSON-format.

Det här kodexemplet visar ett PowerShell-anrop till API:et (tillåt port 5986 när den virtuella datorn skapas):

$accesstoken = "Get token for your Client AAD App"
$headers = @{ "Authorization" = "Bearer $accesstoken" }
$Body = @{ 
   "DNSName" = "XXXX.westus.cloudapp.azure.com"
   "UserName" = "XXX"
   "Password" = "XXX@123456"
   "OS" = "Windows"
   "PortNo" = "5986"
   "CompanyName" = "ABCD"
   "AppId" = "XXXX-XXXX-XXXX"
   "TenantId" = "XXXX-XXXX-XXXX"
} | ConvertTo-Json

$res = Invoke-WebRequest -Method "Post" -Uri $uri -Body $Body -ContentType "application/json" –Headers $headers;
$Content = $res | ConvertFrom-Json

Dessa exempelskärmar visar exempel för att anropa API:et i PowerShell:

Med SSH-nyckel:

Anropa API:et i PowerShell med en SSH-nyckel.

Med lösenord:

Anropa API:et i PowerShell med ett lösenord.


Med hjälp av föregående exempel kan du hämta JSON och parsa den för att få följande information:

$resVar = $res | ConvertFrom-Json
$actualresult = $resVar.Response | ConvertFrom-Json

Write-Host "OSName: $($actualresult.OSName)"
Write-Host "OSVersion: $($actualresult.OSVersion)"
Write-Host "Overall Test Result: $($actualresult.TestResult)"

For ($i = 0; $i -lt $actualresult.Tests.Length; $i++) {
   Write-Host "TestID: $($actualresult.Tests[$i].TestID)"
   Write-Host "TestCaseName: $($actualresult.Tests[$i].TestCaseName)"
   Write-Host "Description: $($actualresult.Tests[$i].Description)"
   Write-Host "Result: $($actualresult.Tests[$i].Result)"
   Write-Host "ActualValue: $($actualresult.Tests[$i].ActualValue)"
}


Den här skärmen, som visar $res.Content, visar information om dina testresultat i JSON-format:

Information om testresultat i JSON-format.


Här är ett exempel på testresultat som visas i ett JSON-visningsprogram online (till exempel Code Beautify eller JSON Viewer).

Testresultat i ett JSON-visningsprogram online.

Använda CURL för att använda API:et för självtest i Linux OS

I det här exemplet används curl för att göra ett POST API-anrop till Microsoft Entra-ID och den virtuella datorn med egen värd.

  1. Begära en Microsoft Entra-token för att autentisera till en virtuell dator med egen värd

    Se till att rätt värden ersätts i curl-begäran.

    curl --location --request POST 'https://login.microsoftonline.com/{TENANT_ID}/oauth2/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=client_credentials' \
    --data-urlencode 'client_id={CLIENT_ID} ' \
    --data-urlencode 'client_secret={CLIENT_SECRET}' \
    --data-urlencode 'resource=https://management.core.windows.net'
    

    Här är ett exempel på svaret från begäran:

    {
        "token_type": "Bearer",
        "expires_in": "86399",
        "ext_expires_in": "86399",
        "expires_on": "1599663998",
        "not_before": "1599577298",
        "resource": "https://management.core.windows.net",
        "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJS…"
    }
    
  2. Skicka en begäran för den virtuella datorn med självtest

    Kontrollera att ägartoken och parametrarna ersätts med rätt värden.

    curl --location --request POST 'https://isvapp.azurewebsites.net/selftest-vm' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJS…' \
    --data-raw '{
        "DNSName": "avvm1.eastus.cloudapp.azure.com",
        "UserName": "azureuser",
        "Password": "SECURE_PASSWORD_FOR_THE_SSH_INTO_VM",
        "OS": "Linux",
        "PortNo": "22",
        "CompanyName": "COMPANY_NAME",
        "AppId": "CLIENT_ID_SAME_AS_USED_FOR_AAD_TOKEN ",
        "TenantId": "TENANT_ID_SAME_AS_USED_FOR_AAD_TOKEN"
    }'
    

    Exempelsvar från API-anropet för den virtuella datorn med självtest:

    {
        "TrackingId": "9bffc887-dd1d-40dd-a8a2-34cee4f4c4c3",
        "Response": "{\"SchemaVersion\":1,\"AppCertificationCategory\":\"Microsoft Single VM Certification\",\"ProviderID\":\"050DE427-2A99-46D4-817C-5354D3BF2AE8\",\"OSName\":\"Ubuntu 18.04\",\"OSDistro\":\"Ubuntu 18.04.5 LTS\",\"KernelVersion\":\"5.4.0-1023-azure\",\"KernelFullVersion\":\"Linux version 5.4.0-1023-azure (buildd@lgw01-amd64-053) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #23~18.04.1-Ubuntu SMP Thu Aug 20 14:46:48 UTC 2020\\n\",\"OSVersion\":\"18.04\",\"CreatedDate\":\"09/08/2020 01:13:47\",\"TestResult\":\"Pass\",\"APIVersion\":\"1.5\",\"Tests\":[{\"TestID\":\"48\",\"TestCaseName\":\"Bash History\",\"Description\":\"Bash history files should be cleared before creating the VM image.\",\"Result\":\"Passed\",\"ActualValue\":\"No file Exist\",\"RequiredValue\":\"1024\"},{\"TestID\":\"39\",\"TestCaseName\":\"Linux Agent Version\",\"Description\":\"Azure Linux Agent Version 2.2.41 and above should be installed.\",\"Result\":\"Passed\",\"ActualValue\":\"2.2.49\",\"RequiredValue\":\"2.2.41\"},{\"TestID\":\"40\",\"TestCaseName\":\"Required Kernel Parameters\",\"Description\":\"Verifies the following kernel parameters are set console=ttyS0, earlyprintk=ttyS0, rootdelay=300\",\"Result\":\"Warning\",\"ActualValue\":\"Missing Parameter: rootdelay=300\\r\\nMatched Parameter: console=ttyS0,earlyprintk=ttyS0\",\"RequiredValue\":\"console=ttyS0#earlyprintk=ttyS0#rootdelay=300\"},{\"TestID\":\"41\",\"TestCaseName\":\"Swap Partition on OS Disk\",\"Description\":\"Verifies that no Swap partitions are created on the OS disk.\",\"Result\":\"Passed\",\"ActualValue\":\"No. of Swap Partitions: 0\",\"RequiredValue\":\"swap\"},{\"TestID\":\"42\",\"TestCaseName\":\"Root Partition on OS Disk\",\"Description\":\"It is recommended that a single root partition is created for the OS disk.\",\"Result\":\"Passed\",\"ActualValue\":\"Root Partition: 1\",\"RequiredValue\":\"1\"},{\"TestID\":\"44\",\"TestCaseName\":\"OpenSSL Version\",\"Description\":\"OpenSSL Version should be >=0.9.8.\",\"Result\":\"Passed\",\"ActualValue\":\"1.1.1\",\"RequiredValue\":\"0.9.8\"},{\"TestID\":\"45\",\"TestCaseName\":\"Python Version\",\"Description\":\"Python version 2.6+ is highly recommended. \",\"Result\":\"Passed\",\"ActualValue\":\"2.7.17\",\"RequiredValue\":\"2.6\"},{\"TestID\":\"46\",\"TestCaseName\":\"Client Alive Interval\",\"Description\":\"It is recommended to set ClientAliveInterval to 180. On the application need, it can be set between 30 to 235. \\nIf you are enabling the SSH for your end users this value must be set as explained.\",\"Result\":\"Warning\",\"ActualValue\":\"120\",\"RequiredValue\":\"ClientAliveInterval 180\"},{\"TestID\":\"49\",\"TestCaseName\":\"OS Architecture\",\"Description\":\"Only 64-bit operating system should be supported.\",\"Result\":\"Passed\",\"ActualValue\":\"x86_64\\n\",\"RequiredValue\":\"x86_64,amd64\"},{\"TestID\":\"50\",\"TestCaseName\":\"Security threats\",\"Description\":\"Identifies OS with recent high profile vulnerability that might need patching.  Ignore warning if system was patched as appropriate.\",\"Result\":\"Passed\",\"ActualValue\":\"Ubuntu 18.04\",\"RequiredValue\":\"OS impacted by GHOSTS\"},{\"TestID\":\"51\",\"TestCaseName\":\"Auto Update\",\"Description\":\"Identifies if Linux Agent Auto Update is enabled or not.\",\"Result\":\"Passed\",\"ActualValue\":\"# AutoUpdate.Enabled=y\\n\",\"RequiredValue\":\"Yes\"},{\"TestID\":\"52\",\"TestCaseName\":\"SACK Vulnerability patch verification\",\"Description\":\"Checks if the running Kernel Version has SACK vulnerability patch.\",\"Result\":\"Passed\",\"ActualValue\":\"Ubuntu 18.04.5 LTS,Linux version 5.4.0-1023-azure (buildd@lgw01-amd64-053) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #23~18.04.1-Ubuntu SMP Thu Aug 20 14:46:48 UTC 2020\",\"RequiredValue\":\"Yes\"}]}"
    }