首页 > 解决方案 > Terraform Azure_Linux_VM 使 SSH 密钥不起作用

问题描述

如何通过 SSH SSH 进入我新创建的 Azure_VM?

我正在通过 Terraform 设置一个简单的 VM,为其分配一个公共 IP 和一个我在本地拥有的 SSH 密钥。使用 terraform 页面本身的教程:https ://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/linux_virtual_machine

resource "azurerm_linux_virtual_machine" "example" {
...
  admin_username = "adminuser"

  admin_ssh_key {
    username   = "adminuser"
    public_key = file("~/.ssh/id_rsa.pub")
  }

[...]
}

但是,Terraform 创建机器后,我无法登录机器。

$ ssh adminuser@xxx.xxx.xxx.xxx 产量:

adminuser@137.117.168.115: Permission denied (publickey).

试过:首先我认为这是错误的公钥。所以我检查了机器上的public_key:

az vm list --query "[].{SSH: 
osProfile.linuxConfiguration.ssh.publicKeys[].keyData}" -o json

并将其与我本地机器上的公钥进行比较。它们是相同的,除了在 Azure-VM 输出中打印的一个“\n”。但是,向我的本地公钥添加新行并没有解决问题。

问题:有时,在摧毁机器并重建机器后,我可以登录。之后和附加terraform destroyterraform apply它不再起作用了。我不明白我做错了什么

那么,如何通过 SSH 连接到我新创建的虚拟机?

标签: azuresshterraform

解决方案


结果我确实adminuser用 cloud_init 配置覆盖了默认值 ( )。将默认用户添加到 cloud_config 后,我可以通过 SSH 连接到 adminuser@xxx.xxx.xxx.xxx

 data "template_cloudinit_config" "config" {                                     
   gzip = true                                                                   
   base64_encode = true                                                          
                                                                                 
   part {                                                                        
     content_type = "text/cloud-config"                                          
     content      = "users: [default, foobar, barfoo]"
   }                                                                             
 }                                                                               
    

推荐阅读