ssh:握手失败:ssh:无法进行身份验证,尝试了方法[none publickey],没有剩余支持的方法



我正试图使用Terraform provisionerremote-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实例正在为使用cloudinit的操作系统使用AMI(大多数Linux发行版的默认映像都是这样(,那么您可以通过使用user_data参数将脚本传递给cloud-init:来避免Terraform通过SSH登录

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作为系统启动的一部分,并访问元数据和用户数据API以检索user_data的值。然后,它将执行脚本的内容,将该操作中的任何消息写入云初始化日志。

我上面描述的是关于如何运行命令来设置计算实例的官方建议。文档中说,提供程序是最后的手段,给出的原因之一是为了避免必须正确配置SSH连接和身份验证的额外复杂性,这正是导致您提出这个问题的复杂性,因此我认为尝试遵循文档中的建议是解决这个问题的最佳方法

相关内容

  • 没有找到相关文章

最新更新