Se agotó el tiempo de espera de la instancia SSH a EC2

Se agotó el tiempo de espera de la instancia SSH a EC2

Creé una instancia AWS EC2 para configurar Prometheus en ella, creé un nuevo par de claves ssh y aprovisioné la instancia usando terraform, usé el tipo de instancia "t3.large" y un disco SSD de 120 GB y el sistema operativo es Ubuntu 18.04, y Podría enviar ssh a la instancia normalmente. Hasta ahora todo está bien.

Después de un tiempo instalando Prometheus y Grafana usando la ventana acoplable, vuelvo a la instancia y descubro que no puedo iniciar sesión. Recibo el siguiente problema:

ssh: connect to host [ip] port 22: Connection timed out

Estoy seguro de que no se trata de un problema de conexión a Internet, ya que puedo acceder a otras instancias mediante ssh. y el problema es el mismo cuando se usa la dirección IP o DNS, el puerto 22 también está abierto.

Este es el script de terraform que utilicé, pero no creo que esté relacionado con esto:

provider "aws" {
  profile = "default"
  region  = "eu-west-1"
}

resource "aws_key_pair" "ubuntu" {
  key_name   = "ubuntu"
  public_key = file("ubuntu.pem.pub")
}

resource "aws_security_group" "ubuntu" {
  name        = "ubuntu-security-group"
  description = "Allow HTTP, HTTPS and SSH traffic"

  ingress {
    description = "SSH"
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    description = "HTTPS"
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    description = "HTTP"
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    description = "HTTP"
    from_port   = 3000
    to_port     = 3000
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    description = "HTTP"
    from_port   = 9090
    to_port     = 9090
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    description = "HTTP"
    from_port   = 9100
    to_port     = 9100
    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 = {
    Name = "terraform"
  }
}


resource "aws_instance" "ubuntu" {
  key_name      = aws_key_pair.ubuntu.key_name
  ami           = "ami-0dc8d444ee2a42d8a"
  instance_type = "t3.large"

  tags = {
    Name = "ubuntu-prometheus"
  }

  vpc_security_group_ids = [
    aws_security_group.ubuntu.id
  ]

  connection {
    type        = "ssh"
    user        = "ubuntu"
    private_key = file("key")
    host        = self.public_ip
  }

  ebs_block_device {
    device_name = "/dev/sda1"
    volume_type = "gp2"
    volume_size = 120
  }
}

resource "aws_eip" "ubuntu" {
  vpc      = true
  instance = aws_instance.ubuntu.id
}

Respuesta1

Finalmente descubrí el problema y obtuve acceso a mi instancia EC2 nuevamente con todos los datos tal como los dejé como estaban.

La razón detrás de este problema es que para permitir el tráfico http en un nuevo puerto utilicé ufwel cual habilita el firewall, y la regla para permitir ssh no está incluida, ufwlo que provoca la pérdida de acceso. Podría haber usado los grupos de seguridad de AWS y haber agregado la regla correcta para evitar todo esto.

La solución fue crear una nueva instancia EC2 y montar el volumen de la antigua instancia EC2 en esta nueva instancia creada.

Enumere los discos disponibles de la siguiente manera:

buntu@ip-172-31-27-78:~$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0         7:0    0 97.8M  1 loop /snap/core/10185
loop1         7:1    0 28.1M  1 loop /snap/amazon-ssm-agent/2012
nvme0n1     259:0    0  120G  0 disk 
└─nvme0n1p1 259:1    0  120G  0 part /
nvme1n1     259:2    0  120G  0 disk 
└─nvme1n1p1 259:3    0  120G  0 part 

Después de esto, monte su partición en cualquier directorio:

$ sudo mkdir /data
$ sudo mount /dev/nvme1n1p1 /data/

Ahora podrá acceder a los archivos de su volumen, para permitir el acceso ssh, edite los archivos user.rulesubicados user6.rulesen el directorio /data/etc/ufwy agregue estas líneas:

#user.rules
-A ufw-user-input -p tcp --dport 22 -j ACCEPT
-A ufw-user-input -p udp --dport 22 -j ACCEPT
user6.rules
-A ufw6-user-input -p tcp --dport 22 -j ACCEPT
-A ufw6-user-input -p udp --dport 22 -j ACCEPT

Felicitaciones aesta publicaciónquien me ayudó mucho y recopilé todos los pasos aquí.

información relacionada