簡體   English   中英

如何獲得使用PowerShell創建的新Azure Linux VM的ssh主機密鑰?

[英]How can I get the ssh host key for a new Azure Linux VM created using PowerShell?

如果使用PowerShell創建Azure Linux VM,如何獲得其新的ssh主機密鑰,以便可以將其安裝在本地ssh / putty中? 優選地,解決方案也是PowerShell代碼。

這是個老問題,但是對於新手來說,如今可以使用Azure CLI中的運行命令來替代。 PowerShell可能也有一個等效項,但我尚未對此進行調查。

az vm run-command invoke --name <your-vm-name> --command-id RunShellScript --scripts "cat /etc/ssh/ssh_host_ecdsa_key.pub"

將輸出一個json文檔,您可以從中提取公鑰。 請注意,盡管此過程非常慢(每個主機約30秒),但是您只需要運行一次即可。 這個主旨為如何更新與Ansible known_hosts文件的例子。

RSA,DSA,ECDSA和ED25519密鑰在首次引導時生成,並且可在引導診斷日志中使用。

Key generation Key listing

如果您在第一次啟動時沒有抓住它,那么我認為它不會在門戶網站的其他任何地方列出。 對於為已部署的VM恢復指紋,我可以考慮的只有一種可行,安全的選項。

  1. 創建一個新的VM。
  2. 附加需要指紋的VM的VHD。
  3. 使用啟動診斷程序中的指紋來驗證您與新VM的連接。
  4. 檢查另一個磁盤上生成的/etc/ssh/ssh_host_rsa_key.pub文件的指紋

    ssh-keygen -lf /{path}/ssh_host_rsa_key.pub

如果需要十六進制編碼的MD5哈希,則可能需要添加-E md5開關。

電源外殼

要通過PowerShell獲取啟動診斷數據:

Get-AzureRmVMBootDiagnosticsData -ResourceGroupName ExampleGroup -Name TestLab -Linux

連接膩子

Azure將主機密鑰指紋計算為公共密鑰的SHA-256哈希的Base64編碼字符串。 當您嘗試使用Putty進行連接時,它將指紋顯示為公鑰MD5哈希的十六進制編碼字符串。

幸運的是,Azure還在引導診斷日志中列出了完整的公鑰,在第二個映像中它表示BEGIN SSH HOST KEY KEYS 這樣,我們可以手動計算Putty呈現的指紋。

C#

static string ComputeMD5FingerprintFromBase64(string encoded)
{
  // Convert Base64 string to byte array.
  byte[] pub = Convert.FromBase64String(encoded);

  // Compute MD5 hash.
  HashAlgorithm md5 = MD5.Create();
  byte[] hash = md5.ComputeHash(pub);

  return BitConverter.ToString(hash).Replace('-', ':');
}

視窗

有關使用RDP安全連接到Windows VM的說明,請參閱我關於此StackOverflow問題的答案。

您可以使用Azure Portal的 “運行命令”功能

  • 在“虛擬機”頁面中,轉到VM菜單“操作”部分中的“運行命令”
  • 選擇“ RunShellScript”命令。
  • 粘貼以下命令:

     for f in /etc/ssh/ssh_host_*_key; do ssh-keygen -l -f "$f"; done 
  • 您將得到如下輸出:

     Enable succeeded: [stdout] 256 SHA256:bKKCom8yh5gOuBNWaHHJ3rrnRXmCOAyPN/WximYEPAU /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA) 256 SHA256:IYeDl+gseYk46Acg4g2mcXGvCr7Z8FqOd+pCJz/KLHg /etc/ssh/ssh_host_ed25519_key.pub (ED25519) 2048 SHA256:rA0lIXvHqFq7VHKQCqHwjsj28kw+tO0g/X4KnPpEjMk root@myazurevm (RSA) [stderr] 

    (密鑰類型集將隨您的VM映像而變化)


該功能也可以通過Azure CLI使用,該功能顯示在上面的鏈接中,以及@mwik的答案中。


另請參閱我的完整指南,了解如何使用SFTP安全連接到Microsoft Azure服務

也許正是您想要的。 我現在將通過您的帳戶與您一起嘗試。

基本上,您似乎需要在創建時附加.pem 在此處輸入圖片說明

哪個應該產生您的證書指紋。
在此處輸入圖片說明

Windows VM示例

Select-AzureSubscription mysub $service = 'yourservicename1' $location = 'West US' New-AzureService -ServiceName $service -Location $location Add-AzureCertificate -CertToDeploy 'D:User-DatadevelopmentAzure Samplesmlwdevcert.cer' -ServiceName $service $cert1 = New-AzureCertificateSetting -Thumbprint D7BECD4D63EBAF86023BB4F1A5FBF5C2C924902A -StoreName 'My' New-AzureVMConfig -ImageName 'MSFT__Windows-Server-2012-Datacenter-201208.01-en.us-30GB.vhd' -InstanceSize 'Small' -Name 'win2012cert' | Add-AzureProvisioningConfig -Windows -Password 'somepass@1' -Certificates $cert1 | New-AzureVM -ServiceName $service

Linux VM示例

Select-AzureSubscription mysub $service = 'yourservicename1' $location = 'West US' New-AzureService -ServiceName $service -Location $location Add-AzureCertificate -CertToDeploy 'D:User-DatadevelopmentAzure Samplesmlwdevcert.cer' -ServiceName $service $sshkey = New-AzureSSHKey -PublicKey -Fingerprint D7BECD4D63EBAF86023BB4F1A5FBF5C2C924902A -Path '/home/admin/.ssh/authorized_keys' New-AzureVMConfig -ImageName 'CANONICAL__Canonical-Ubuntu-12-04-amd64-server-20120528.1.3-en-us-30GB.vhd' -InstanceSize 'Small' -Name 'linuxwithcert' | Add-AzureProvisioningConfig -Linux -LinuxUser 'mwasham' -Password 'somepass@1' -SSHPublicKeys $sshKey | New-AzureVM -ServiceName $service

注意:-Certificates和-SSHPublicKeys參數是數組,因此它們可以接受多個證書。 -SSHPublicKeys $ sshKey1,$ sshKey2

對於Linux,還有-SSHKeyPairs參數用於傳遞密鑰對,而不僅僅是傳遞公共密鑰。 -證書可以在Windows上處理兩種類型。

在他們的幫助文檔中,有一個頁面討論如何重置密碼或ssh密鑰:

https://docs.microsoft.com/zh-cn/azure/virtual-machines/linux/troubleshoot-ssh-connection

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM