调用 New-AzVM 时将 AzVMSshPublicKey 添加到 vmConfig 失败

Add-AzVMSshPublicKey to vmConfig fails when calling New-AzVM

我正在关注 windows quickstart for creating a VM in azure powershell

我被困在这里:

# Configure the SSH key
$sshPublicKey = cat ~/.ssh/id_rsa.pub
Add-AzVMSshPublicKey `
  -VM $vmconfig `
  -KeyData $sshPublicKey `
  -Path "/home/azureuser/.ssh/authorized_keys"

首先我认为下面的代码是错误的,因为 cat returns System.String[] 和 运行 逐字逐句地导致 Add-AzVMSshPublicKey : Cannot convert 'System.Object[]' to the type 'System.String'

所以...我改为使用 Get-Content "./path/to/file" -raw,它只是 returns 一个字符串和命令 运行s 而没有错误

现在当我运行

New-AzVM `
  -ResourceGroupName $resourceGroupName `
  -Location $location -VM $vmConfig

我收到以下错误,这意味着我之前设置的 keyData 设置不正确。 New-AzVM : The value of parameter linuxConfiguration.ssh.publicKeys.keyData is invalid.

我发现了问题 - 所以 Azure 密钥保管库在表单中为我提供了一个 PEM public 密钥 -----开始 PUBLIC 键----- MIIBojANBgkqhkiG9w0BAQEFAAO... ... ... ... ...0CS94AFAgMBAAE= -----结束 PUBLIC 关键-----

而 VM 期望它采用 OpenSSH 格式

ssh-rsa ..........

我试过用 ssh-keygen -i -m PKCS8 -f ./key.pem 但没有任何输出

更新 Aaa 是 powershell issue

首先,本教程是通过 Azure PowerShell 创建 Linux VM 的指南,而不是 Windows。其次,命令 cat 只是输出文件的内容。命令 $sshPublicKey = cat ~/.ssh/id_rsa.pub 在字符串中创建一个变量:

命令Add-AzVMSshPublicKey的参数-KeyData也需要一个字符串:

所以PowerShell命令没有问题,所有命令在我这边都可以正常工作。并且报错显示密钥数据的值无效,你需要做的是确定SSH public密钥是否有问题。

要从 Azure 密钥保管库获取此密钥, Get-AzKeyVaultKey -OutFile *filename* returns public 键入 PEM Form

-----BEGIN PUBLIC KEY------
....
-----END PUBLIC KEY-----

vm要求关键数据为OpenSSH格式的一行

ssh-rsa ....... mykeylabel

但是 Powershell 的 ssh-keygen 与它的 UNIX 对应物不同,不能在这些格式之间转换,因为它有一个 open bug