2012-12-24 137 views
19

几天前我已经设置了EC2实例,甚至昨天晚上我能够顺利地进行SSH连接,没有任何问题。今天早上,我无法甩掉它。 22号港口已经在安全部门开放,自昨晚起我没有改变任何东西。运行EC2实例突然拒绝SSH连接

错误:

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

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

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

任何想法?

谢谢。

+0

你设置实例上的SSH安全性,让所有IP或只是你的吗?如果只是你的,你的IP是否改变了? – Kirk

+0

@Kirk:所有端口(包括22)的源为0.0.0.0/0。协议:tcp。 – Sherzod

+0

您是否从您的实例创建了AMI?如果是这样,请从中运行新的实例。 –

回答

24

在@ 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的问题。

UPDATE 2015年4月23日

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

+1

您可以发表博文或者在这里评论你用来替换fstab的shell命令/ init脚本?我遇到了同样的问题。 –

+0

你是shershams,是救生员。这个笔记应该包含在亚马逊文档中。 – s29

+0

我的问题特别是临时存储上的文件系统在机器关闭时被擦除,因此启动后fstab无法安装它。您的解决方案的想法也非常适合我的问题。 – asaad

1

转到您的AWS管理控制台> select instance>右键单击并选择“获取系统日志” 这将列出出错的地方。

+1

那里没有什么用处......最后的日志正在谈论EBS卷,我昨天晚上正在处理这些卷。 – Sherzod

6

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

另外,你是否能够从AWS Web控制台ssh?他们有一个java插件来插入实例。

+0

aws web控制台也说连接被拒绝。我将尝试立即重新启动。但除了重新启动之外,还有别的方法吗?它使得运行在那里的服务和网站对用户不可用... – Sherzod

+0

尝试对端口22上的实例执行telnet。'telnet hostname 22'。如果连接起来,那至少会告诉我们sshd正在运行,但由于某种原因我们会被阻止,并且可以从那里进行故障排除。 –

+0

连接被拒绝...我已重新启动实例,但仍无法访问它。而且,现在apache和mysql也没有运行。帮帮我? – Sherzod

4

这发生在我身上的红帽EC2实例,因为这两条线路都将自动被追加在/ etc/ssh/sshd_config文件的每次我开始了我的情况下结束时间:

的PermitRootLogin没有密码
UseDNS没有

其中一个追加操作不换行做,所以sshd_config文件的尾部看起来像:

的PermitRootLogin没有密码
UseDNS noPermitRootLogin没有密码
UseDNS没有

导致的sshd到未能在下次发布时开始。我认为这是由于此处报告的错误引起的:https://bugzilla.redhat.com/show_bug.cgi?id=956531解决方案是删除sshd_config文件底部的所有重复条目,并在最后添加额外换行符。

+5

每当实例通过/etc/rc.local文件启动(或重新启动)时,都会添加这些行。为了防止这种情况一遍又一遍地发生,您还需要注释掉/etc/rc.local文件中的3个相关行。这将解决好问题。 – Telegard

+0

ianmcook,@Telegard:谢谢,这个窍门 –

4

对于那些你们谁过这个职位后来,因为你无法在重新启动后SSH到您的EC2实例,this is cross-posteda similar question at serverfault

the AWS Developer Forum post on this topic

Try stopping the broken instance, detaching the EBS volume, and attaching it as a secondary volume to another instance. Once you've mounted the broken volume somewhere on the other instance, check the /etc/sshd_config file (near the bottom). I had a few RHEL instances where Yum scrogged the sshd_config inserting duplicate lines at the bottom that caused sshd to fail on startup because of syntax errors.

Once you've fixed it, just unmount the volume, detach, reattach to your other instance and fire it back up again.

让我们打破这种下来,并链接到AWS文档:

  1. Stop the broken instance并通过进入EC2管理缺点分离EBS(根卷)点击“Elastic Block Store”>“Volumes”,右键单击与您停止的实例相关联的卷。
  2. 在与破坏的实例然后attach the original EBS root volume as a secondary volume to your new instance相同的区域和相同的OS中启动新实例。下面的步骤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. @Telegardpoints 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 Sto重新“>”卷“,右键单击与停止的实例关联的卷,
  8. reattach to your other instance
  9. fire it back up again
+0

这是这个问题上最有用的帖子!非常感谢。 我想补充一点,使卷在Red HaT下成为根卷名/ dev/sda1。 – Sych

+0

@Sych:很高兴帮助。卷附件文档中有一节提供了有关根卷名称的指导:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html#device_naming –

0

我得到了类似的SSH通过分离锁定的EBS却忘了修改/ etc/fstab中