Networking
SSH 到 EC2 實例超時
我創建了一個 AWS EC2 實例以在其上設置 prometheus,我創建了一個新的 ssh 密鑰對並使用 terraform 配置了該實例,我使用實例類型為“t3.large”和一個 120GB 的 SSD 磁碟,作業系統是 Ubuntu 18.04,並且我可以正常 ssh 到實例。到現在為止一切都還好。
使用 docker 安裝 Prometheus 和 Grafana 一段時間後,我回到實例,發現無法登錄!我收到以下問題:
ssh: connect to host [ip] port 22: Connection timed out
我確定這不是網際網路連接問題,因為我可以通過 ssh 連接到其他實例。使用ip地址或DNS時問題相同,埠22也是開放的。
這是我使用的 terraform 腳本,但我認為它與此無關:
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 }
我終於找到了問題所在,我再次使用我留下的所有數據訪問了我的 EC2 實例。
這個問題背後的原因是,為了允許 http 流量進入我使用
ufw
的啟用防火牆的新埠,並且不包含允許 ssh 的規則,ufw
這會導致訪問失去。我本可以使用 aws 安全組並添加正確的規則來避免所有這些。解決方案是創建一個新的 EC2 實例並將舊 EC2 實例的捲安裝到這個新創建的實例上。
列出可用磁碟如下:
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
在此之後將您的分區掛載到任何目錄:
$ sudo mkdir /data $ sudo mount /dev/nvme1n1p1 /data/
現在您將能夠訪問您的捲文件,以允許 ssh 訪問編輯文件
user.rules
並user6.rules
位於目錄中/data/etc/ufw
並添加以下行:#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
感謝這篇對我幫助很大的文章,我在這裡收集了所有步驟。