azure - 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 destroy
,terraform apply
它不再起作用了。我不明白我做错了什么
那么,如何通过 SSH 连接到我新创建的虚拟机?
解决方案
结果我确实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]"
}
}
推荐阅读
- javascript - 在数组中过滤数组
- javascript - 尝试以更优雅的方式编写此内容。我可以在这个函数中使用三元吗?
- f#-data - Json Provider 失败,路径中有非法字符
- java - javax.ws.rs.client.WebTarget POST 并同时获取响应
- c# - SSIS 脚本组件目标 - 将表数据拆分到多个文件
- python-3.x - 在特定日期使用 tweepy 获取有关特定哈希值的 Twitter 数据
- python-3.x - 使用余数帮助查找索引?
- mathjax - 为什么 MathJax 设计为异步工作(仅)/如何同步使用 MathJax?
- svn - 仅在 HEAD 修订版 TortoiseSVN 上允许结帐
- c++ - 访问 boost:shared_ptr 在主范围外崩溃,断言失败:px!= 0。指针的正确用法是什么?