我创建了一个微型ec2实例 . 安装了所有必要的网络软件,mysql和git . 从该实例中创建了一个AMI . 由于该实例使用EBS作为其根设备,因此在创建AMI时也使用了EBS快照 .
我终止了正在运行的实例 . 然后,我尝试创建一个亚马逊机器映像(AMI)的实例,新实例启动以及新的EBS卷附加到实例 .
现在,当我使用我的密钥对通过我的ssh密钥登录到该实例时,使用命令作为其公共DNS地址
ssh -i aws/mykey.pem ubuntu@thepublicdnsname
它说
ssh: connect to host <thepublickdnsname> port 22: Connection refused
为什么会这样呢?我能够通过ssh使用相同的密钥连接到我的第一个实例 . 现在新实例是精确的副本,我无法登录它 . 对此有任何帮助......?我错过了什么吗?
我使用相同的密钥对从AMI创建第二个新实例 .
8 回答
我发现EC2实例需要花费不同的时间才能启动并初始化 . 一个是调用ec2-run-instances直到实例状态从"pending"变为"running"之间的时间 . 之后,ssh服务器准备就绪时还有一段时间 . 那个时间可能是几分钟 .
我有同样的问题:我的问题是我有一个卷附加到我的实例,然后我分离卷并删除它 . 我按照aws docs挂载我的实例并编辑了/ etc / fstab . 这就是问题:当卷分离并且您尝试重新启动(或停止并启动)实例时,它会转到此文件并尝试附加不存在的卷,并且ssh守护程序未启动 .
The solution is :我不得不创建另一个实例,从有问题的实例中分离卷然后编辑mounted_point / etc / fstab文件来注释它试图挂载不存在的实例的行,重新连接卷到有问题的实例然后它工作得很好 .
这可能不是原始问题的答案,但由于这是针对EC2连接问题的Google的首要问题,因此请务必将安全组配置为允许来自您计算机的SSH2:
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AccessingInstances.html#authorizing-access-to-an-instance
AWS需要时间从AMI调出实例 . 如果您尝试连接太快,而且频繁,则该框无法响应 . 下面的完整脚本启动AMI,确定IP地址,并等待系统准备好连接 . 对于接近或低于当前定价的现场实例,它将非常有效,因为连接所需的时间可能差异很大 .
当睡眠语句被注释掉时,以下循环导致连接拒绝错误,并且在实例启动后它开始得太快 . 它还在脚本服务器上消耗了大量的CPU,并制作了大量的错误日志 .
这是一个完整的脚本来启动实例,标记它,等待它完全启动,然后连接 .
连接拒绝端口22错误的另一个可能原因是拼错了公共DNS名称 . 例如,我的一部分包含
.compute.
并且我放了.computer.
并且它给了我一个端口22错误而不是像主机不存在那样更合理的东西 .你检查了实例的IP地址吗?除非我选择固定ip,否则每次运行时我都会更改 .
我有一个不同的(而且非常愚蠢)问题 . 在这里发布这个答案,以防它帮助其他人 .
作为我调试的一部分,我启动了几个新实例,但没有一个可以连接,所以我只是重新启动了我的机器!
它现在有效! :d
我遇到了类似的问题,我注意到该实例是使用paravirtual虚拟化创建的,并且在使用hvm重新创建后问题得到了解决 .