【问题标题】:invalid format error when trying to ssh into pulumi-created azure nextgen vm尝试 ssh 到 pulumi 创建的 azure nextgen vm 时出现无效格式错误
【发布时间】:2021-05-05 14:03:19
【问题描述】:

我正在尝试在使用 azure nextgen Pulumi api 创建的虚拟机中创建和 ssh。我正在运行 Window 10。

成功创建 VM 后,出于测试目的,我将私钥导出到文件,减少权限以避免“权限太开放”错误,然后运行 ​​ssh user@ip -i keyfile.rsa。但是,我收到错误:Load key ... invalid format.

相关脚本如下:

const rsaKey = new tls.PrivateKey("rsaKey", {
    algorithm: "RSA",
});

const vm = new azure_nextgen.compute.latest.VirtualMachine("vm", {
    location: resourceGroup.location,
    resourceGroupName: resourceGroup.name,
    vmName: "linuxvm",
    hardwareProfile: {
        vmSize: "Standard_B1ms", // may go up to standard b2ms
    },
    networkProfile: {
        networkInterfaces: [{
            id: networkInterface.id,
        }]
    },
    osProfile: {
        adminUsername: vmUser,
        computerName: "test-vm",
        linuxConfiguration: {
            disablePasswordAuthentication: true,
            ssh: {
                publicKeys: [{
                    keyData: rsaKey.publicKeyOpenssh,
                    path: "/home/*username*/.ssh/authorized_keys",
                }]
            }
        }
    },
    storageProfile: {
        imageReference: {
            offer: "UbuntuServer",
            publisher: "Canonical",
            sku: "18.04-LTS",
            version: "latest",
        },
        osDisk: {
            caching: "ReadWrite",
            createOption: "FromImage",
            managedDisk: {
                storageAccountType: "Standard_LRS",
            },
            name: "myVMosdisk",
        },
    }
})

【问题讨论】:

    标签: typescript azure ssh pulumi


    【解决方案1】:

    关于要检查的一些想法:

    • 如果您启用密码访问并登录到实例,您是否根据您的代码看到给定用户下的公钥?
    • 当您将私钥保存在本地时,它的格式是否正确 - 因此当您查看文件时看起来像这种块格式?
    -----BEGIN OPENSSH PRIVATE KEY-----
    b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS
    1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQR9WZPeBSvixkhjQOh9yCXXlEx5CN9M
    yh94CJJ1rigf8693gc90HmahIR5oMGHwlqMoS7kKrRw+4KpxqsF7LGvxAAAAqJZtgRuWbY
    ....
    EbAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH1Zk94FK+LGSGNA
    6H3IJdeUTHkI30zKH3gIknWuKB/zr3eBz3QeZqEhHmgwYfCWoyhLuQqtHD7gqnGqwXssa/
    EAAAAgBzKpRmMyXZ4jnSt3ARz0ul6R79AXAr5gQqDAmoFeEKwAAAAOYWpAYm93aWUubG9j
    YWwBAg==
    -----END OPENSSH PRIVATE KEY-----
    

    【讨论】:

    • 是的,如果我生成自己的密钥对并在脚本中硬编码公钥,我可以正常访问实例并在正确的文件中查看公钥。是的,它的格式为 BEGIN RSA PRIVATE KEY,但我相信它的格式正确
    【解决方案2】:

    下面是一段代码示例,它生成密钥,然后将其写入文件,然后可以与ssh -i ... 一起使用 注意使用.apply() 来呈现键值。否则,写入的文件将基本上包含错误/帮助消息,而不是私钥。

    const sshKey = new tls.PrivateKey(`${projectName}-sshkey`, {
        algorithm: "RSA",
    });
    const privateKeyPem = sshKey.privateKeyPem.apply(key => {
        fs.writeFile('privateKeyPem', key, (err) => {
            console.log("privateKeyPem saved")
        })
    })
    

    您的 VM 声明看起来不错。但为了确认,我假设您在 VM 的 ssh 块的路径中显示的 *username* 实际上设置为您用于上面的 adminusername 参数的值。如果没有,则需要匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2021-05-23
      • 2018-04-28
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多