ssh:握手失败:ssh:无法验证,已尝试方法 [none publickey],没有支持的方法
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
我正在尝试使用 Terraform 供应器 remote-exec
在 ec2 实例上安装 Nginx,但我一直 运行 进入此错误。
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
这就是我的代码的样子
resource "aws_instance" "nginx" {
ami = data.aws_ami.aws-linux.id
instance_type = "t2.micro"
key_name = var.key_name
vpc_security_group_ids = [aws_security_group.allow_ssh.id]
connection {
type = "ssh"
host = self.public_ip
user = "ec2-user"
private_key = file(var.private_key_path)
}
provisioner "remote-exec" {
inline = [
"sudo yum install nginx -y",
"sudo service nginx start"
]
}
}
安全组规则设置为允许从任何地方使用 ssh。
而且我可以从我的本地机器通过 ssh 进入盒子。
不确定我在这里是否真的遗漏了。我尝试了更新版本的 Terraform,但还是同样的问题。
如果您的 EC2 实例正在为使用 cloud-init 的操作系统使用 AMI(大多数 Linux 发行版的默认图像都使用),那么您可以避免 Terraform 登录的需要SSH 通过使用 user_data
参数将脚本传递给 cloud-init:
resource "aws_instance" "nginx" {
ami = data.aws_ami.aws-linux.id
instance_type = "t2.micro"
key_name = var.key_name
vpc_security_group_ids = [aws_security_group.allow_ssh.id]
user_data = <<-EOT
yum install nginx -y
service nginx start
EOT
}
对于包含cloud-init的操作系统,系统将运行cloud-init作为系统启动的一部分,它会访问the metadata and user data API to retrieve the value of user_data
. It will then execute the contents of the script, writing any messages from that operation into the cloud-init logs。
我上面描述的是 the official recommendation for how to run commands to set up your compute instance. The documentation says that provisioners are a last resort,给出的原因之一是避免必须正确配置 SSH 连接和身份验证的额外复杂性,正是这种复杂性导致您问这个问题,所以我认为尝试遵循文档中的建议是解决它的最佳方法。
我正在尝试使用 Terraform 供应器 remote-exec
在 ec2 实例上安装 Nginx,但我一直 运行 进入此错误。
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
这就是我的代码的样子
resource "aws_instance" "nginx" {
ami = data.aws_ami.aws-linux.id
instance_type = "t2.micro"
key_name = var.key_name
vpc_security_group_ids = [aws_security_group.allow_ssh.id]
connection {
type = "ssh"
host = self.public_ip
user = "ec2-user"
private_key = file(var.private_key_path)
}
provisioner "remote-exec" {
inline = [
"sudo yum install nginx -y",
"sudo service nginx start"
]
}
}
安全组规则设置为允许从任何地方使用 ssh。 而且我可以从我的本地机器通过 ssh 进入盒子。
不确定我在这里是否真的遗漏了。我尝试了更新版本的 Terraform,但还是同样的问题。
如果您的 EC2 实例正在为使用 cloud-init 的操作系统使用 AMI(大多数 Linux 发行版的默认图像都使用),那么您可以避免 Terraform 登录的需要SSH 通过使用 user_data
参数将脚本传递给 cloud-init:
resource "aws_instance" "nginx" {
ami = data.aws_ami.aws-linux.id
instance_type = "t2.micro"
key_name = var.key_name
vpc_security_group_ids = [aws_security_group.allow_ssh.id]
user_data = <<-EOT
yum install nginx -y
service nginx start
EOT
}
对于包含cloud-init的操作系统,系统将运行cloud-init作为系统启动的一部分,它会访问the metadata and user data API to retrieve the value of user_data
. It will then execute the contents of the script, writing any messages from that operation into the cloud-init logs。
我上面描述的是 the official recommendation for how to run commands to set up your compute instance. The documentation says that provisioners are a last resort,给出的原因之一是避免必须正确配置 SSH 连接和身份验证的额外复杂性,正是这种复杂性导致您问这个问题,所以我认为尝试遵循文档中的建议是解决它的最佳方法。