【问题标题】:Add-AzVMSshPublicKey to vmConfig fails when calling New-AzVM调用 New-AzVM 时,向 vmConfig 添加-AzVMSshPublicKey 失败
【发布时间】:2021-04-17 15:55:16
【问题描述】:

我正在关注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 返回System.String[] 并且逐字运行会导致 Add-AzVMSshPublicKey : Cannot convert 'System.Object[]' to the type 'System.String'

所以...我改用Get-Content "./path/to/file" -raw,它只返回一个字符串,并且命令运行没有错误

现在当我跑步时

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

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

我找到了问题 - 所以 Azure 密钥保管库给了我一个 PEM 公钥,格式为 -----开始公钥----- MIIBojANBgkqhkiG9w0BAQEFAAO... ... ... ... ...0CS94AFAgMBAAE= -----结束公钥-----

而虚拟机期望它采用 OpenSSH 格式

ssh-rsa ....

我尝试将其转换为 ssh-keygen -i -m PKCS8 -f ./key.pem 但没有任何输出

更新 啊,这是powershell issue

【问题讨论】:

  • 您的 SSH 密钥 (~/.ssh/id_rsa.pub) 是否以 ssh-rsa...开头?
  • 关于这个问题的任何更新?它解决了你的问题吗?
  • 您好,密钥以 -----BEGIN PUBLIC KEY----- 开头

标签: windows azure powershell azure-powershell


【解决方案1】:

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

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

所以 PowerShell 命令没有问题,所有命令在我这边都可以正常工作。并且报错是key data的值是无效的,你需要确认一下SSH公钥是否有问题。

【讨论】:

  • 嗨,我的 powershell 返回以下 PS C:\Users\Rowan\Documents\GitHub\CloudScripts> $test = cat .\tempKey.pub PS C:\Users\Rowan\Documents\GitHub\ CloudScripts> $test.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array跨度>
  • @foldone 您的 SSH 公钥不正确。您需要删除该文件并再次创建新的 SSH 公钥。
  • 嗨,Charles,是的,公钥格式错误 - 它以 -----BEGIN PUBLIC KEY----- 这就是 Get-AzureKeyVaultKey 返回的内容,所以我会必须将其转换为 ssh-rsa
  • @foldone 你疯了吗?您从我这里得到了解决方案,但您不接受我的回答并添加另一个?当它对您有帮助时,您需要接受答案,而不是添加副本。
【解决方案2】:

要从 Azure Key Vault 获取此密钥, Get-AzKeyVaultKey -OutFile *filename* 返回PEM Form 中的公钥

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

vm要求密钥数据是OpenSSH格式的单行

ssh-rsa ....... mykeylabel

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多