EC2 SSH端口22连接被拒绝,尽管之前可以使用。

9
我有一台EC2实例,上面托管了几个站点,之前一直运行得很好。

今天我尝试通过SSH连接它,但它仅拒绝在22端口上的连接,即使安全组已经打开并设置给了该实例。

有人能帮我解决这个问题吗?

每次都只出现这一行 - ssh: connect to host 54.247.99.86 port 22: Connection refused


我的意思是,我甚至使用了之前有效的相同命令。 - David
听起来你的sshd可能已经崩溃了,据我记得如果防火墙应用了,你会遇到超时问题。 - Joachim Isaksson
不过我不确定如何具体重新启动它? - David
刚刚发现启动sshd时出现了以下问题:/var/empty/sshd必须由root拥有,并且不能被组或全局写入。[失败] - David
不确定我能做什么? - David
显示剩余5条评论
2个回答

2

如果您的实例是基于EBS而不是Instance存储,则首先备份ami映像,然后停止实例,启动新的未加工实例。

由于旧实例是基于EBS的,请分离卷并将其附加到新实例。一旦附加,请将其挂载到某个目录中,更改/var/empty/sshd的权限,还要执行cat /etc/fstab以了解/分区的挂载位置。现在从新实例卸载该卷,并使用与fstab中完全相同的挂载点将其附加到旧实例上,例如/dev/sda1用于/。

附加后,请启动旧实例并检查是否能够登录。


好的,我会尝试一下,任何可以避免重新构建整个东西的方法对我来说都很好。 - David

1
为了解决这个问题,您可以按照以下步骤操作:
  1. 在相同的区域中启动一个新实例(这样我们就可以将 EBS 卷附加到它上面)。
  2. 停止当前实例并分离 EBS 卷。
  3. 将该卷附加到新实例的 /dev/sdf。
  4. SSH 进入新实例并运行以下命令:sudo mount /dev/sdf /mnt
  5. 运行此命令:cat /mnt/etc/rc.d/rc.local

如果输出包含这些行,请从 rc.local 文件中删除它们:

    cat <<EOL >> /etc/ssh/sshd_config
    UseDNS no
    PermitRootLogin without-password
    EOL
  • 修改完rc.local文件后,您可以卸载EBS卷,从临时实例中分离它,并重新将其附加到原始实例的/dev/sda1位置。然后您应该能够通过SSH登录实例。
  • 这似乎是一个临时解决方案。如果您重新启动,这个问题会再次出现。我也在寻找永久的解决方案。


    我在将Ubuntu从14.04升级到18.04后也遇到了同样的问题。我没有rc.local文件,那么怎么办呢……? - DevOpsSauce

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接