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, ufw
der die Firewall aktiviert, und die Regel zum Zulassen von SSH nicht enthalten ist, ufw
was 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.rules
und user6.rules
fügen /data/etc/ufw
Sie 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.