I've been going through answers to similar questions on this StackExchange and on StackOverflow and reading through documentations all day ...
Here's the .tf file I'm executing:
# defines the AWS provider
provider "aws" {
# credentials path: ~/.aws/credentials
profile = var.aws_profile
}
resource "aws_key_pair" "key_pair" {
# variable's default value: "id_rsa"
key_name = var.aws_key_pair_name
# variable's default value: public key of "id_rsa"
public_key = var.aws_key_pair_public
}
resource "aws_security_group" "security_group" {
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
# variable's default value: "security-group-1"
Name = var.aws_security_group_tags_name
}
}
resource "aws_instance" "instance" {
# variable's default value: ID of the Ubuntu AMI
ami = var.aws_instance_ami
# variable's default value: "t2.micro"
instance_type = var.aws_instance_type
associate_public_ip_address = true
key_name = aws_key_pair.key_pair.key_name
vpc_security_group_ids = [aws_security_group.security_group.id]
tags = {
# variable's default value: "ec2-instance-1"
Name = var.aws_instance_tags_name
}
}
resource "null_resource" "instance" {
provisioner "remote-exec" {
connection {
type = "ssh"
host = aws_instance.instance.public_ip
# variable's default value: "ubuntu", Ubuntu AMI's default system user account
user = var.aws_instance_user_name
# variable's default value: "~/.ssh/id_rsa"
# the path to the public key provided to aws_key_pair.key_pair
private_key = file(var.aws_key_pair_private_path)
timeout = "20s"
}
inline = ["echo 'remote-exec message'"]
}
provisioner "local-exec" {
command = "echo 'local-exec message'"
}
}
I tried executing it with the permissions of the private key's file set to 400 and 600. It's returning the following error in both cases:
aws_instance.instance (remote-exec): Connecting to remote host via SSH...
aws_instance.instance (remote-exec): Host: 54.82.23.158
aws_instance.instance (remote-exec): User: ubuntu
aws_instance.instance (remote-exec): Password: false
aws_instance.instance (remote-exec): Private key: true
aws_instance.instance (remote-exec): Certificate: false
aws_instance.instance (remote-exec): SSH Agent: true
aws_instance.instance (remote-exec): Checking Host Key: false
aws_instance.instance (remote-exec): Target Platform: unix
aws_instance.instance: Still creating... [1m0s elapsed]
╷
│ Error: remote-exec provisioner error
│
│ with aws_instance.instance,
│ on main.tf line 63, in resource "aws_instance" "instance":
│ 63: provisioner "remote-exec" {
│
│ timeout - last error: SSH authentication failed ([email protected]:22): ssh: handshake failed: ssh: unable to
│ authenticate, attempted methods [none publickey], no supported methods remain
This is despite of the fact that the following command connects to the EC2 instance successfully:
ubuntu:~/projects/course-1/project-1$ ssh -i "id_rsa" [email protected]
What am I missing? Is there a better apprach?