带有 Terraform 的 KVM:SSH 权限被拒绝(Cloud-Init)
Posted
技术标签:
【中文标题】带有 Terraform 的 KVM:SSH 权限被拒绝(Cloud-Init)【英文标题】:KVM with Terraform: SSH permission denied (Cloud-Init) 【发布时间】:2020-07-12 04:15:14 【问题描述】:我有一个 KVM 主机。我正在使用 Terraform 创建一些使用 KVM 提供程序的虚拟服务器。以下是 Terraform 文件的相关部分:
provider "libvirt"
uri = "qemu+ssh://root@192.168.60.7"
resource "libvirt_volume" "ubuntu-qcow2"
count = 1
name = "ubuntu-qcow2-$count.index+1"
pool = "default"
source = "https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img"
format = "qcow2"
resource "libvirt_network" "vm_network"
name = "vm_network"
mode = "bridge"
bridge = "br0"
addresses = ["192.168.60.224/27"]
dhcp
enabled = true
# Use CloudInit to add our ssh-key to the instance
resource "libvirt_cloudinit_disk" "commoninit"
name = "commoninit.iso"
pool = "default"
user_data = "data.template_file.user_data.rendered"
network_config = "data.template_file.network_config.rendered"
data "template_file" "user_data"
template = file("$path.module/cloud_config.yaml")
data "template_file" "network_config"
template = file("$path.module/network_config.yaml")
cloud_config.yaml 文件包含以下信息:
manage_etc_hosts: true
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
lock_passwd: false
ssh-authorized-keys:
- $file("/path/to/keyfolder/homelab.pub")
ssh_pwauth: false
disable_root: false
chpasswd:
list: |
ubuntu:linux
expire: False
package_update: true
packages:
- qemu-guest-agent
growpart:
mode: auto
devices: ['/']
服务器创建成功,我可以从运行 Terraform 脚本的主机 ping 设备。尽管我通过 cloud-init 文件传递了我的 SSH 密钥,但我似乎无法通过 SSH 登录。
从存储我所有密钥的文件夹中运行:
homecomputer:keyfolder wim$ ssh -i homelab ubuntu@192.168.80.86
ubuntu@192.168.60.86: Permission denied (publickey).
在这个命令中,homelab 是我的私钥。
我无法登录的任何原因?有什么办法调试吗?我现在无法登录服务器进行调试。我尝试在 cloud-config 文件中设置passwd
,但这也不起作用
*** 附加信息
1) 渲染的模板如下:
> data.template_file.user_data.rendered
manage_etc_hosts: true
users:
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
home: /home/ubuntu
shell: /bin/bash
lock_passwd: false
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1y***Homelab_Wim
ssh_pwauth: false
disable_root: false
chpasswd:
list: |
ubuntu:linux
expire: False
package_update: true
packages:
- qemu-guest-agent
growpart:
mode: auto
devices: ['/']
【问题讨论】:
渲染的模板是什么样的?您应该能够输出它以帮助调试。 我用这些信息更新了原始问题。似乎显示了正确的 SSH 密钥。ssh -vvv ...
的输出可能也很有用,以防显示某些内容。
【参考方案1】:
我也遇到了同样的问题,因为我错过了第一行
#cloud-config
在 cloudinit.cfg 文件中
【讨论】:
【参考方案2】:您需要添加libvirt_cloudinit_disk
资源才能将ssh-key 添加到VM,
我的 TF 脚本中的代码:
# Use CloudInit ISO to add ssh-key to the instance
resource "libvirt_cloudinit_disk" "commoninit"
count = length(var.hostname)
name = "$var.hostname[count.index]-commoninit.iso"
#name = "$var.hostname-commoninit.iso"
# pool = "default"
user_data = data.template_file.user_data[count.index].rendered
network_config = data.template_file.network_config.rendered
【讨论】:
以上是关于带有 Terraform 的 KVM:SSH 权限被拒绝(Cloud-Init)的主要内容,如果未能解决你的问题,请参考以下文章
CentOS 7搭建KVM在线管理面板WebVirtMgr之使用SSH授权登录
在 Terraform 管理的 AWS EC2 SSH 堡垒实例上处理多个用户的 SSH 密钥
SSH 密钥未受保护的 terraform ansible jenkins