ssh - Terraform 0.11 google_compute_instance 文件配置器 ssh 身份验证失败
问题描述
我正在尝试使用 terraform 部署“艰难地”部署 k8s。请在此处找到 repo:https ://github.com/aidanSoles/kubernetes-the-hard-way-terraform
它是使用 Terraform 0.11 编写的,所以我选择不将代码升级到 0.12。
部署会创建 Google Cloud Platform 虚拟机并尝试在其上运行脚本。
应用配置时收到的错误消息是:
Error: Error applying plan:
2 errors occurred:
* google_compute_instance.k8s_worker: timeout - last error: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
* google_compute_instance.k8s_controller: timeout - last error: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
这是google_compute_instance
供应商的片段:
resource "google_compute_instance" "k8s_controller" {
boot_disk {
auto_delete = true
initialize_params {
image = "${var.controller_image}"
size = "${var.controller_size}"
}
}
can_ip_forward = true
count = "${var.controller_count}"
machine_type = "${var.controller_type}"
name = "k8s-controller${count.index}"
network_interface {
access_config = {}
subnetwork = "${google_compute_subnetwork.k8s_subnet.name}"
}
metadata {
creator = "${var.user}"
}
provisioner "file" {
connection {
private_key = "${file(var.ssh_path)}"
user = "${var.user}"
type = "ssh"
}
destination = "add-ssh-keys.sh"
source = "${var.scripts_path}/add-ssh-keys.sh"
}
}
你可以在这里找到完整的脚本:https ://github.com/aidanSoles/kubernetes-the-hard-way-terraform/blob/master/compute.tf
我通过执行 确保user
和ssh_path
变量值是正确的ssh -i
。我也尝试将agent = false
参数添加到文件配置器中,但无济于事。
知道问题的根源是什么吗?非常感谢。
解决方案
关于文档:
我已遵循该指南并确认它正在工作。
我已经尝试过terraform-0.11.14。目前,配置文件似乎与 terraform 0.12 不兼容。
关于错误:
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
请检查以下内容:
如果您的
<username>@<hostname>
组合与您在步骤“5. 创建服务帐户”中提供的公钥中的组合匹配。您可以使用hostname
和whoami
命令获取这些信息。$ whoami && hostname superman my_pc $ cat ~/.ssh/tform_rsa.pub | awk '{print $3}' superman@my_pc
只有在我粘贴在 GCP 上的元数据/SSH 密钥下的公钥中输入错误时,我才能成功重现完全相同的症状。
variables.tf
这就是为什么您指定的私钥与上传到 GCP 的公钥之间存在拼写错误或不匹配的原因。对您的私钥(您用于 ssh 的那个)的权限。它应设置为 600 (-rw--------) 以及
certs
目录中关键文件的权限。
希望有帮助:-)
推荐阅读
- c# - 在 DataTable 中显示已删除的行
- c - 从文件插入到链表 C
- html - 如何使用计数器更改 div 值
- python - Python:将Unicode字符转换为相应的Unicode字符串
- express - 如何让geojson与ejs一起工作并在vega-lite可视化中表达
- android - 如何在应用程序最小化时暂停/停止收集/发送流中的数据?
- opencv - 将 Pose-estimator algorithm - 应用于图像识别算法的边界框的输出
- gtk - 如何使用 Python+PyGObject 的 GObject.bind_property 函数进行 2 路数据绑定?
- html - 如何将链接放置在文本的右侧?
- ansible - Ansible - 在远程主机上复制多个文件