我今天一直在解决 Terraform Provisioner 与 ssh 的连接问题。到目前为止,我已经尝试过我以前认为的方法:
provisioner "remote-exec" {
inline = [
"echo ${google_compute_instance.testing-elastic-1.network_interface.0.access_config.0.assigned_nat_ip}"]
connection {
type = "ssh"
user = "root"
private_key = "${file("~/.ssh/google_compute_engine")}"
timeout = "45s"
}
}
但我不断收到以下错误。
Error applying plan:
1 error(s) occurred:
* ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
我还尝试在终端使用 ssh 直接登录 IP。
ssh -i ~/.ssh/google_compute_engine.pub 122.122.122.122
这工作得很好。所以我也在配置中尝试了这个,或者我认为在配置中会模仿这个。
provisioner "remote-exec" {
inline = [
"echo ${google_compute_instance.testing-elastic-1.network_interface.0.access_config.0.assigned_nat_ip}"]
connection {
type = "ssh"
user = ""
private_key = "${file("~/.ssh/google_compute_engine")}"
timeout = "45s"
}
}
又遇到一个错误。
申请计划时出错:
发生 1 个错误:
- ssh:握手失败:ssh:无法验证,尝试的方法[无公钥],没有支持的方法
所以我尝试了这个。
provisioner "remote-exec" {
inline = [
"echo ${google_compute_instance.testing-elastic-1.network_interface.0.access_config.0.assigned_nat_ip}"]
connection {
type = "ssh"
private_key = "${file("~/.ssh/google_compute_engine")}"
timeout = "45s"
}
}
最后,似乎什么都没有改变。我马上回来了这个错误消息。
Error applying plan:
1 error(s) occurred:
* ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
我不确定我还应该拥有或需要什么才能使 ssh 身份验证正常工作。
您的项目中可能有错误的
sshKey
设置。假设您的provisioner
or附加了以下内容resource
:您应该能够验证项目的
sshKey
:$ gcloud compute project-info describe
我的猜测是
sshKey
根据 GCE,项目的值设置部分没有很好地形成。如果您逐步执行以下操作,您可能会发现导致此问题的配置问题:(或者,这可能很简单,例如您的代理中加载了太多密钥,这就是我在
connection
上面禁用代理的原因)