共用方式為


在 Azure Stack Hub 或 Azure Stack 開發工具包上設定 Azure CLI 的憑證

請遵循本文中的步驟,設定 Azure 命令列介面 (CLI) 以從Linux、Mac和 Windows 用戶端平臺管理 Azure Stack 開發工具包 (ASDK) 資源。 如果您在中斷連線的環境中使用整合式系統 Azure Stack Hub,或您的憑證不是由受信任根程式中的 CA 所簽發,您也可以遵循這些步驟。

本文說明取得您的憑證,並在遠端管理計算機上信任這些憑證。 若要安裝 Azure CLI 並連線到您的環境,請參閱 在 Azure Stack Hub 上安裝 Azure CLI。

準備 Azure CLI

您需要 Azure Stack Hub 的 CA 跟證書,才能在開發電腦上使用 Azure CLI。 您可以使用憑證透過 CLI 管理資源。

  • 如果您是從 Azure Stack Hub 環境外部的工作站使用 CLI,則需要 Azure Stack Hub CA 跟證書

  • 虛擬機別名端點 會提供別名,例如 「UbuntuLTS」 或 「Win2012Datacenter」。此別名會在部署 VM 時參考映像發行者、供應專案、SKU 和版本作為單一參數。

下列各節說明如何取得這些值。

匯出 Azure Stack Hub CA 跟證書

匯出 CA 跟證書。 若要以 PEM 格式匯出 ASDK 跟證書:

  1. 取得 Azure Stack Hub 跟憑證的名稱:

    1. 登入 Azure Stack Hub 使用者或 Azure Stack Hub 系統管理員入口網站。
    2. 選取瀏覽器網址列中的鎖定。
    3. 在彈出視窗中,選取 [ 連線是安全的]。
    4. 在 [憑證] 視窗中,選取 [ 認證路徑] 索引標籤
    5. 記下 Azure Stack Hub 跟證書的名稱,例如 *.<locale>.<FQDN>

    Azure Stack Hub 跟證書

  2. 在 Azure Stack Hub 上建立 Windows VM。

  3. 登入 VM、開啟提升許可權的 PowerShell 提示字元,然後執行下列腳本:

      $label = "*.<locale>.<FQDN> from step 1"
      Write-Host "Getting certificate from the current user trusted store with subject CN=$label"
      $root = Get-ChildItem Cert:\CurrentUser\Root | Where-Object Subject -eq "CN=$label" | select -First 1
      if (-not $root)
      {
          Write-Error "Certificate with subject CN=$label not found"
          return
      }
    
    Write-Host "Exporting certificate"
    Export-Certificate -Type CERT -FilePath root.cer -Cert $root
    
  4. 針對 Linux,也需要下列命令:

    export REQUESTS_CA_BUNDLE=~/.local/lib/python3.9/site-packages/certifi/cacert.pem
    # RECOMMENDED: set the env var automatically for your subsequent sessions
    echo 'export REQUESTS_CA_BUNDLE=~/.local/lib/python3.9/site-packages/certifi/cacert.pem' >> ~/.bash_profile
    
  5. 將憑證複製到本機計算機。

設定虛擬機別名端點

您可以設定可公開存取的端點,以裝載 VM 別名檔案。 VM 別名檔案是 JSON 檔案,可提供映像的通用名稱。 當您將 VM 部署為 Azure CLI 參數時,請使用名稱。

  1. 如果您發佈自定義映像,請記下您在發佈期間指定的發行者、供應專案、SKU 和版本資訊。 如果是來自市集的映射,您可以使用 Cmdlet 來檢視資訊 Get-AzureVMImage

  2. 從 GitHub 下載範例檔案

  3. 在 Azure Stack Hub 中建立記憶體帳戶。 完成時,請建立 Blob 容器。 將存取原則設定為 「公用」。

  4. 將 JSON 檔案上傳至新的容器。 完成時,您可以檢視 Blob 的 URL。 選取 Blob 名稱,然後從 Blob 屬性中選取 URL。

信任憑證

若要搭配 ASDK 使用 Azure CLI,您必須信任遠端電腦上的 CA 跟證書。

  1. 尋找您機器上的憑證位置。 位置可能會根據您已安裝 Python 的位置而有所不同。

  2. 若要尋找位置,請開啟 CMD 提示字元或提升許可權的 PowerShell 提示字元,然後輸入: az --version。 版本和 Python 位置會出現在提示中。

    azure-cli                         2.30.0
    
    core                              2.30.0
    telemetry                          1.0.6
    
    Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe'
    Extensions directory 'C:\Users\username\.azure\cliextensions'
    
    Python (Windows) 3.8.9 (tags/v3.8.9:a743f81, Apr  6 2021, 13:22:56) [MSC v.1928 32 bit (Intel)]
    
    Legal docs and information: aka.ms/AzureCliLegal
    
    Your CLI is up-to-date.
    
    Please let us know how we are doing: https://aka.ms/azureclihats
    and let us know if you're interested in trying out our newest features: https://aka.ms/CLIUXstudy
    
  3. 變更至 Azure CLI 已安裝 Python 的目錄。 例如,使用步驟 2 cd "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\中的位置。

  4. 輸入以下命令:

    .\python -c "import certifi; print(certifi.where())"
    

    這會傳回您電腦上的憑證位置路徑。 您的特定路徑取決於您的OS和已安裝的 Python 版本。 例如:

    C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem
    

    記下憑證位置。 在下一個步驟中,您將使用路徑。

  5. 將 Azure Stack Hub CA 跟證書附加至現有的 Python 憑證,以信任該跟證書。

    $cerFile = "<Fully qualified path to the cer certificate exported from `
    your Azure Stack Hub and saved. For example: C:\Users\user1\Downloads\root.cer"
    $pythonCertStore = <result from step 4>
    
    $cerDir = Split-Path -Parent $cerFile
    $pemFile = "$cerDir\root.pem"
    Write-Host "Converting certificate to PEM format at $pemFile"
    certutil -encode $cerFile $pemFile
    $root = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
    $root.Import($pemFile)
    
    # X509Certificate2.Thumbprint calculates SHA1 hash of the public key. You can get sha1 of the pem file by using openssl, 
    # e.g. openssl x509 -noout -fingerprint -sha1 -inform pem -in ./root.pem
    # Alternatively, 'Get-FileHash' gives the same value (without ':') for the corresponding cer file
    # Since the thumbprint is a unique value for the certificate, it is commonly used to find a particular certificate in a certificate store
    Write-Host "Extracting required information from the cert file"
    $md5Hash    = (Get-FileHash -Path $cerFile -Algorithm MD5).Hash.ToLower()
    $sha1Hash   = (Get-FileHash -Path $cerFile -Algorithm SHA1).Hash.ToLower()
    $sha256Hash = (Get-FileHash -Path $cerFile -Algorithm SHA256).Hash.ToLower()
    
    $issuerEntry  = [string]::Format("# Issuer: {0}", $root.Issuer)
    $subjectEntry = [string]::Format("# Subject: {0}", $root.Subject)
    $labelEntry   = [string]::Format("# Label: {0}", $root.Subject.Split('=')[-1])
    $serialEntry  = [string]::Format("# Serial: {0}", $root.GetSerialNumberString().ToLower())
    $md5Entry     = [string]::Format("# MD5 Fingerprint: {0}", $md5Hash)
    $sha1Entry    = [string]::Format("# SHA1 Fingerprint: {0}", $sha1Hash)
    $sha256Entry  = [string]::Format("# SHA256 Fingerprint: {0}", $sha256Hash)
    $certText = (Get-Content -Path $pemFile -Raw).ToString().Replace("`r`n","`n")
    
    $rootCertEntry = "`n" + $issuerEntry + "`n" + $subjectEntry + "`n" + $labelEntry + "`n" + `
    $serialEntry + "`n" + $md5Entry + "`n" + $sha1Entry + "`n" + $sha256Entry + "`n" + $certText
    
    Write-Host "Adding the certificate content to Python Cert store"
    Add-Content $pythonCertStore $rootCertEntry
    
    Write-Host "Python Cert store was updated to allow the Azure Stack Hub CA root certificate"
    

如需使用 Azure CLI 安裝和連線的指示,請參閱 在 Azure Stack Hub 上安裝 Azure CLI。

下一步

在 Azure Stack Hub 上安裝 Azure CLI