Zeitüberschreitung bei SSH zur EC2-Instanz

Zeitüberschreitung bei SSH zur EC2-Instanz

Ich habe eine AWS EC2-Instanz erstellt, um Prometheus darauf einzurichten, ich habe ein neues SSH-Schlüsselpaar erstellt und die Instanz mit Terraform bereitgestellt, ich habe den Instanztyp „t3.large“ und eine SSD-Festplatte mit 120 GB verwendet und das Betriebssystem ist Ubuntu 18.04, und ich konnte normal per SSH auf die Instanz zugreifen. Bis jetzt ist alles in Ordnung.

Nachdem ich einige Zeit damit verbracht habe, Prometheus und Grafana mithilfe von Docker zu installieren, kehre ich zur Instanz zurück und stelle fest, dass ich mich nicht anmelden kann. Ich habe das folgende Problem:

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

Ich bin sicher, dass dies kein Problem mit der Internetverbindung ist, da ich per SSH auf andere Instanzen zugreifen kann. Und das Problem ist das gleiche, wenn die IP-Adresse oder DNS verwendet werden, Port 22 ist ebenfalls geöffnet.

Dies ist das Terraform-Skript, das ich verwendet habe, aber ich glaube nicht, dass es hiermit zusammenhängt:

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
}

Antwort1

Ich habe das Problem schließlich herausgefunden und kann wieder auf meine EC2-Instanz mit allen Daten zugreifen, die ich so hinterlassen habe, wie sie sind.

Der Grund für dieses Problem ist, dass ich, um HTTP-Verkehr zuzulassen, einen neuen Port verwendet habe, ufwder die Firewall aktiviert, und die Regel zum Zulassen von SSH nicht enthalten ist, ufwwas zum Verlust des Zugriffs führt. Ich hätte AWS-Sicherheitsgruppen verwenden und die richtige Regel hinzufügen können, um all dies zu vermeiden.

Die Lösung bestand darin, eine neue EC2-Instanz zu erstellen und das Volume der alten EC2-Instanz an diese neu erstellte Instanz anzubinden.

Listen Sie die verfügbaren Datenträger wie folgt auf:

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 

Danach mounten Sie Ihre Partition in ein beliebiges Verzeichnis:

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

Jetzt können Sie auf Ihre Volumedateien zugreifen. Um SSH-Zugriff zuzulassen, bearbeiten Sie die im Verzeichnis befindlichen Dateien user.rulesund user6.rulesfügen /data/etc/ufwSie diese Zeilen hinzu:

#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

Ein großes Lob andieser Beitragder mir sehr geholfen hat, und ich habe alle Schritte hier gesammelt.

verwandte Informationen