【发布时间】:2021-09-16 04:07:14
【问题描述】:
我有一个应用程序已经在 EC2 上成功运行了几年。系统为 Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1032-aws x86_64)。
这是一个小而简单的应用程序,流量低。直到今天,我才对服务器本身进行任何更改。我想处理X packages can be updated. 消息,所以我跑了:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
然后我跑了sudo reboot。重新启动后,应用程序运行完美。我可以通过公共 URL 正常访问它并查看内容,包括 db(直接在服务器上的 postgresql)数据,没有任何问题或意外。
但是,当我再次尝试通过 ssh 连接到机器时,我做不到。我做ssh -i "key.pem" -vvv ubuntu@<IP> 并得到:
debug1: Connecting to <IP> [<IP>] port 22.
debug1: connect to address <IP> port 22: Operation timed out
ssh: connect to host <IP> port 22: Operation timed out
没有对安全组进行任何更改。另外,这是一个很小的项目,我从来没有设置过 EC2 Instance Connect 或类似的东西。
我曾想过启动一个新的 EC2 并只是切换 EBS 卷,认为 EBS 会带来应用程序和数据,而实例本身将具有配置和权限。
我对此不太了解(显然),并且很惊讶地得知 EBS 卷本身似乎是问题所在,并且掌握了所有的牌。
我可以在两个 EC2 实例之间来回切换 EBS 卷。在任何给定时间,在/dev/sda1 附加了最新(因此是空白)EBS 卷的任何一个都允许 SSH,但肯定不会运行该应用程序。而且,反之亦然:无论哪个 EC2 实例具有原始 EBS 卷,都可以完美运行应用程序,但让我无法访问 ssh。
在这种情况下,问题是:如何让其中一个 EC2 实例绕过此 EBS 问题并自行决定是否允许我使用 ssh 连接?
或者:我在这里遗漏的明显和/或愚蠢的事情是什么?
PS:我确实有弹性 IP 来解决所有这些问题,所以 DNS 似乎不是问题的根源。
【问题讨论】:
-
您是否一次只有 一个 EBS 卷附加到一个实例?如果是这样,当您说“最新的(因此是空白的)EBS 卷”时,它并不是真正的空白——它包含操作系统。阻止访问的“旧”卷出现问题,例如激活防火墙或更改文件权限。您可以尝试启动好卷,然后将“坏”卷附加为附加卷。这将使您可以访问磁盘以检查
/home/ubuntu/.ssh/authorized_keys文件(检查内容以及文件权限)。 -
抱歉让您等了这么久才回来签到。我按照您的建议做了,学习非常有趣!谢谢!我能够从新的启动,然后连接旧的并检查一下。关键的东西在权限和内容方面看起来是一样的。我还尝试了其他一些文件,但没有发现任何实际解决问题的方法。如果是防火墙,我在哪里查看和比较配置等一些常见的地方?
-
抱歉,这超出了我的知识范围。这可能会有所帮助:Security - Firewall | Ubuntu
-
确实有帮助!再次感谢!通过阅读建议的文章,我能够理解我可以将
ufw行添加到我拥有的现有重启脚本中,这可能是确保服务器启用 ssh 的一种方法。成功了! -
我创建了一个答案来解释这一切。如果您有能力/有兴趣,请随时查看并提供反馈和/或更改等。
标签: linux amazon-web-services ubuntu amazon-ec2 ssh