繁体   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