【问题标题】:Running EC2 instance suddenly refuses SSH connection运行 EC2 实例突然拒绝 SSH 连接
【发布时间】:2023-04-11 06:55:01
【问题描述】:

我在几天前设置了 EC2 实例,甚至昨晚我也能够毫无问题地通过 SSH 连接到它。今天早上,我无法通过 ssh 访问它。安全组中的 22 端口已经打开,从昨晚开始我没有更改任何内容。

错误:

ssh: connect to host [ip address] port 22: Connection refused

我最近遇到了类似的问题,但我不知道为什么会这样,所以我必须创建一个新实例,重新设置它,然后将所有 EBS 存储连接并配置到新实例。花了我几个小时......现在它又发生了。上一个我安装了denyhost,可能会屏蔽我,但是现在只有apache2,mysql在运行。

当前实例已经运行了 16 个小时,所以我认为不是因为它没有完成启动...另外,端口 22 对所有源(0.0.0.0/0)开放并且正在使用tcp 协议。

有什么想法吗?

谢谢。

【问题讨论】:

  • 您是否将实例上的 SSH 安全设置为允许所有 IP 或仅允许您的 IP?如果只是你的,你的 IP 有没有变化?
  • @Kirk:所有端口的源为 0.0.0.0/0,包括 22。协议:tcp。
  • 您是否从您的实例创建了 AMI?如果是这样,从它运行新的实例。
  • 万一您在配置文件中做错了,现在您在外面无法进入,EC2 中的系统日志将看不到您任何内容。如果它只是要从配置文件中注释掉一些东西(它发生在我之前,我正在更改我的 ssh 并且无法再进入)你可以简单地通过 ftp 连接(我有 vsftpd 和 Adob​​e DW)访问“/”,然后转到 /etc/ssh/ssh_config 或其他您可能想要注释掉您所做的事情并从 EC2 仪表板重新启动系统的地方。如果是关于配置文件,您可能需要 ftp 访问权限。
  • @kirk 非常感谢!我的 IP 已更改,我已将我的安全组设置为仅接受来自单个 IP。因此,我失去了对 4 个盒子的 SSH 访问权限!现已修复:)。

标签: apache ssh amazon-web-services amazon-ec2 connection


【解决方案1】:

转到您的 AWS 管理控制台 > 选择实例 > 右键单击​​并选择“获取系统日志” 这将列出出了什么问题。

【讨论】:

  • 没有什么有用的...最后的日志是关于 EBS 卷的,我昨晚正在使用它。
【解决方案2】:

看起来 sshd 可能由于某种原因停止了。实例 EBS 是否支持?如果是这种情况,请尝试将其关闭并重新启动。这应该可以解决问题。

另外,您可以从 AWS Web 控制台进行 ssh 吗?他们有一个 java 插件可以通过 ssh 进入实例。

【讨论】:

  • aws Web 控制台也说连接被拒绝。我现在会尝试重新启动。但是除了重启还有别的办法吗?它使用户无法在其中运行的服务和网站...
  • 尝试远程登录到端口 22 上的实例。telnet hostname 22。如果它连接了,那至少会告诉我们 sshd 正在运行,但由于某种原因我们被阻止了,我们可以从那里进行故障排除。
  • 连接被拒绝...我已经重新启动了实例,但仍然无法访问它。此外,现在 apache 和 mysql 也没有运行。帮忙?
  • 这很奇怪。那么telnet也无法连接到22端口吗?您还可以尝试使用 -v 开关进行 ssh 吗?那输出什么?
  • 似乎有些奇怪的问题。没有 ssh,我们真的什么都做不了。我会尝试涉及 AWS 支持
【解决方案3】:

在@abhi.gupta200297 的帮助下,我们得以解决它。

问题是/etc/fstab中的错误,应该在fstab成功后启动sshd。但事实并非如此,因此 sshd 不会启动,这就是它拒绝连接的原因。解决方案是创建一个临时实例,从原始实例安装根 EBS,并注释掉 fstab 中的内容,瞧,它让我再次连接。对于未来,我刚刚停止使用 fstab 并创建了一堆 shell 命令来将 EBS 卷挂载到目录并将它们添加到 /etc/init.d/ebs-init-mount 文件中,然后运行 ​​update-rc.d ebs-init-mount defaults 来初始化文件,我不再拥有锁定 ssh 的问题。

2015 年 4 月 23 日更新

亚马逊团队制作了类似问题的视频教程,并展示了如何使用此方法进行调试:https://www.youtube.com/watch?v=_P29ZHu_feU

【讨论】:

  • 你能在这里发表一篇博文或评论你用来替换 fstab 的 shell 命令/init 脚本吗?我遇到了同样的问题。
  • 谢舍姆斯先生,你们是救生员。此注释应包含在亚马逊文档中。
  • 我的问题特别是临时存储上的文件系统在机器关闭时被擦除,因此 fstab 无法在启动后挂载它。您的解决方案的想法也非常适合我的问题。
  • 天啊!!很高兴我找到了这个。这同样发生在我身上。必须注释掉,获得访问权限并 fsck 驱动器。
【解决方案4】:

这发生在我的 Red Hat EC2 实例上,因为每次启动实例时这两行都会自动附加到 /etc/ssh/sshd_config 文件的末尾:

PermitRootLogin without-password
UseDNS no

其中一个附加操作是在没有换行符的情况下完成的,因此 sshd_config 文件的尾部如下所示:

PermitRootLogin without-password
UseDNS noPermitRootLogin without-password
UseDNS no

这导致 sshd 在下次启动时无法启动。我认为这是由此处报告的错误引起的:https://bugzilla.redhat.com/show_bug.cgi?id=956531 解决方案是删除 sshd_config 文件底部的所有重复条目,并在末尾添加额外的换行符。

【讨论】:

  • 每次实例通过 /etc/rc.local 文件启动(或重启)时都会添加这些行。为防止这种情况反复发生,您还需要注释掉 /etc/rc.local 文件中的 3 行相关行。这将永远解决问题。
【解决方案5】:

对于那些因为重启后无法通过 SSH 连接到 EC2 实例而看到这篇文章的人,this is cross-posteda similar question at serverfault

来自the AWS Developer Forum post on this topic

尝试停止损坏的实例,分离 EBS 卷,然后 将其作为辅助卷附加到另一个实例。一旦你已经 将损坏的卷安装在另一个实例的某处,检查 /etc/sshd_config 文件(靠近底部)。我有几个 RHEL 实例 Yum 在 sshd_config 插入重复行的地方 由于语法错误导致 sshd 在启动时失败的底部。

修复后,只需卸载卷、分离、重新附加到 你的另一个实例并再次启动它。

让我们通过指向 AWS 文档的链接来分解它:

  1. Stop the broken instance 并分离 EBS(根)卷,方法是进入 EC2 管理控制台,单击“弹性块存储”>“卷”,右键单击与您停止的实例关联的卷。
  2. 在与损坏的实例相同的区域和相同的操作系统中启动一个新实例,然后attach the original EBS root volume as a secondary volume to your new instance。下面第 4 步中的命令假设您将卷安装到名为“data”的文件夹中。
  3. 一旦你mounted the broken volume somewhere on the other instance
  4. 通过发出以下命令检查“/etc/sshd_config”文件中的重复条目:
    • cd /etc/ssh
    • sudo nano sshd_config
    • ctrl-v 很多次才能到文件底部
    • ctrl-k 在底部提到“PermitRootLogin without-password”和“UseDNS no”的所有行
    • ctrl-xY 保存并退出编辑的文件
  5. @Telegard points out (in his comment) 我们只修复了症状。我们可以通过注释掉“/etc/rc.local”文件中的3个相关行来修复原因。所以:
    • cd /etc
    • sudo nano rc.local
    • 查找“PermitRootLogin...”行并将其删除
    • ctrl-xY 保存并退出编辑的文件
  6. 修复后,只需unmount the volume
  7. 通过进入 EC2 管理控制台,单击“Elastic Block Store”>“卷”进行分离,右键单击与您停止的实例关联的卷,
  8. reattach to your other instance
  9. fire it back up again

【讨论】:

  • 这是关于这个问题的最有用的帖子!非常感谢。我会添加它以使该卷成为 Red HaT 下的 /dev/sda1 的根卷名称。
  • @Sych:乐于助人。卷附件文档中有一个部分提供了有关根卷命名的指导:docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
  • 在我的情况下,/var/empty/sshd 的所有权错误。它应该是 root:root,但它是别的东西。不知道为什么会改变。
【解决方案6】:

我通过分离 EBS 锁定了类似的 ssh,但忘记修改 /etc/fstab

【讨论】:

    【解决方案7】:

    有同样的问题,但系统日志有这个:

    启动 sshd:/var/empty/sshd 必须由 root 拥有,而不是组或全局可写。 [失败]

    使用与上述相同的步骤分离卷并附加到可连接的实例。然后使用:

    sudo chmod 755 /var/empty/sshd

    sudo chown root:root /var/empty/sshd

    (https://support.microsoft.com/en-us/help/4092816/ssh-fails-because-var-empty-sshd-is-not-owned-by-root-and-is-not-group)

    然后分离并重新附加到原始 EC2 实例,现在可以通过 ssh 访问。

    【讨论】:

      【解决方案8】:

      如果你的ubuntu有systemd,你可以编辑/lib/systemd/system/local-fs.target并注释掉最后两行:

      #OnFailure=emergency.target
      #OnFailureJobMode=replace-irreversibly
      

      我没有对此进行广泛的测试,也不知道是否存在任何风险或副作用,但到目前为止,它就像一个魅力。它会挂载根卷和所有其他卷(显然配置错误的卷除外),然后继续启动过程直到 SSH 启动,因此您可以连接到实例并修复不正确的 fstab 条目。

      【讨论】:

        【解决方案9】:

        在我的情况下,卷空间不足并且服务无法启动。我使用AWS tutorial(来自 Sherzod 的帖子)将它安装在一个好的 EC2 实例上并清理它并从启动中删除服务,然后重新安装它并验证一切是否正常。

        【讨论】:

          【解决方案10】:

          对我来说,是我的 IP 发生了变化。希望这可以帮助某人。导航到安全组并在入站规则中更新您的“我的 IP”。

          【讨论】:

            【解决方案11】:

            我遇到了同样的问题,因为权限被拒绝错误而无法连接到 aws 实例。

            我能够通过屏幕共享呼叫与 aws 团队联系,他们指导我使用以下用户元脚本更改 aws 实例的文件夹权限。

            步骤:

            1. 停止实例
            2. 操作 > 实例设置 > 编辑用户元

            1. 输入以下脚本并保存

            **内容类型:多部分/混合;边界=“//” MIME版本:1.0 --// 内容类型:文本/云配置; charset="us-ascii" MIME 版本:1.0 内容传输编码:7 位内容处置:附件;文件名="云配置.txt" #cloud-config cloud_final_modules:

            • [脚本用户,始终] - // 内容类型: 文本/x-shellscript; charset="us-ascii" MIME 版本:1.0 内容传输编码:7 位内容处置:附件;文件名="用户数据.txt" #!/bin/bash chown root:root /home chmod 755 /home chmod 700 /home/ubuntu chmod 700 /home/ubuntu/.ssh chmod 600 /home/ubuntu/.ssh/authorized_keys ls -ld /home /home/ ubuntu /home/ubuntu/.ssh /home/ubuntu/.ssh/authorized_keys chown ubuntu:ubuntu /home/ubuntu -R --//**
            1. 保存并使用正确的 pem 密钥连接到实例。

            解决了我的问题 *将 ubuntu 更改为您的实例用户名

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-07-05
              • 2015-01-06
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多