21

几天前我已经设置了 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 协议。

有任何想法吗?

谢谢。

4

11 回答 11

29

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

问题是 中的错误/etc/fstab,并且 sshd 应该在fstab成功后启动。但事实并非如此,因此 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

于 2012-12-27T07:15:52.553 回答
7

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

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

于 2012-12-24T22:45:51.703 回答
6

对于那些因为在重启后无法通过 SSH 连接到 EC2 实例而遇到这篇文章的人,这是在 serverfault 上交叉发布类似问题的

来自AWS 开发人员论坛关于此主题的帖子

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

一旦你修复它,只需卸载卷,分离,重新连接到你的另一个实例并再次启动它。

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

  1. 通过进入 EC2 管理控制台,单击“弹性块存储”>“卷”,右键单击与您停止的实例关联的卷,停止损坏的实例并分离 EBS(根)卷。
  2. 在与损坏的实例相同的区域和相同的操作系统中启动一个新实例,然后将原始 EBS 根卷作为辅助卷附加到您的新实例。下面第 4 步中的命令假设您将卷安装到名为“data”的文件夹中。
  3. 损坏的卷安装到另一个实例的某个位置后
  4. 通过发出以下命令检查“/etc/sshd_config”文件中的重复条目:
    • cd /etc/ssh
    • sudo nano sshd_config
    • ctrl-v很多次才能到达文件的底部
    • ctrl-k底部的所有行都提到“PermitRootLogin without-password”和“UseDNS no”
    • ctrl-xY保存并退出编辑的文件
  5. @Telegard 指出(在他的评论中)我们只修复了症状。我们可以通过注释掉“/etc/rc.local”文件中相关的3行来解决这个问题。所以:
    • cd /etc
    • sudo nano rc.local
    • 查找“PermitRootLogin ...”行并删除它们
    • ctrl-xY保存并退出编辑的文件
  6. 修复后,只需卸载卷
  7. 通过进入 EC2 管理控制台,单击“弹性块存储”>“卷”,右键单击与您停止的实例关联的卷,进行分离,
  8. 重新连接到您的其他实例
  9. 再次启动它
于 2014-05-28T21:50:17.947 回答
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 文件底部的所有重复条目,并添加额外的换行符在最后。

于 2014-02-04T21:10:26.113 回答
1

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

于 2012-12-24T22:34:32.160 回答
0

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

启动 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 访问。

于 2019-05-21T13:53:46.423 回答
0

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

于 2020-05-20T21:10:46.173 回答
0

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

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

脚步 :

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

在此处输入图像描述

  1. 输入以下脚本并保存

**内容类型:多部分/混合;boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME 版本:1.0 内容传输编码:7 位内容处置:附件;filename="cloud-config.txt" #cloud-config cloud_final_modules:

  • [scripts-user, always] --// Content-Type: text/x-shellscript; charset="us-ascii" MIME 版本:1.0 内容传输编码:7 位内容处置:附件;filename="userdata.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 更改为您的实例用户名

于 2022-01-25T08:40:53.977 回答
0

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

于 2016-02-26T10:18:35.520 回答
0

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

于 2021-09-07T21:28:56.380 回答
0

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

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

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

于 2019-07-29T03:04:51.783 回答