运行EC2实例突然拒绝SSH连接

She*_*zod 19 apache connection ssh amazon-ec2 amazon-web-services

几天前我已经设置了EC2实例,甚至昨晚我也能够没问题地连接到它.今天早上,我不能说.端口22已经在安全组中打开,自昨晚以来我没有改变任何东西.

错误:

ssh: connect to host [ip address] port 22: Connection refused
Run Code Online (Sandbox Code Playgroud)

我最近有类似的问题,我无法弄清楚它为什么会发生,所以我不得不创建一个新实例,再次设置它,并连接并配置所有EBS存储到新的.花了我几个小时......现在又发生了.在前一个,我安装了denyhost,可能已经阻止了我,但在当前的一个,只有apache2,并运行mysql.

现在的实例已经持续了16个小时,所以我认为这不是因为它没有完成启动...而且,端口22对所有源(0.0.0.0/0)开放并使用tcp协议.

有任何想法吗?

谢谢.

She*_*zod 28

在@ 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


abh*_*297 7

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

此外,您是否能够从AWS Web控制台ssh?他们有一个java插件来ssh进入实例.


Jer*_*nch 6

对于那些因为您在重新启动后无法通过SSH连接到您的EC2实例而遇到此帖子的人,这会在serverfault上交叉发布类似的问题:

关于这一主题的AWS开发者论坛发帖:

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

一旦你修好它,只需卸下音量,分离,重新连接到你的另一个实例并重新启动它.

让我们分解一下,链接到AWS文档:

  1. 通过进入EC2管理控制台,单击"Elastic Block Store">"Volumes",右键单击与您停止的实例关联的卷,停止损坏的实例并分离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管理控制台,单击"Elastic Block Store">"Volumes",右键单击与您停止的实例关联的卷,
  8. 重新连接到您的其他实例
  9. 再把它重新开火.