[英]How can i login to VM using Azure Bastion Host Other than Azure portal web based 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密钥在首次引导时生成,并且可在引导诊断日志中使用。
如果您在第一次启动时没有抓住它,那么我认为它不会在门户网站的其他任何地方列出。 对于为已部署的VM恢复指纹,我可以考虑的只有一种可行,安全的选项。
检查另一个磁盘上生成的/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的新 “运行命令”功能 。
粘贴以下命令:
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服务 。
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
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.