Amazon ec2 连接拒绝连接到我正在运行的Amazon EC2实例

Amazon ec2 连接拒绝连接到我正在运行的Amazon EC2实例,amazon-ec2,Amazon Ec2,我创建了一个micro ec2实例。安装了所有必要的web软件,mysql和git。从该实例创建了一个AMI。由于该实例使用EBS作为其根设备,所以在我创建AMI时,它也拍摄了EBS快照 我终止了那个正在运行的实例。然后,我尝试在amazon机器映像(AMI)上创建一个实例,新实例随着一个新EBS卷连接到该实例而启动 现在,当我使用我的密钥对通过ssh密钥登录到该实例的公共DNS地址时,命令如下 ssh -i aws/mykey.pem ubuntu@thepublicdnsname 上面说

我创建了一个micro ec2实例。安装了所有必要的web软件,mysql和git。从该实例创建了一个AMI。由于该实例使用EBS作为其根设备,所以在我创建AMI时,它也拍摄了EBS快照

我终止了那个正在运行的实例。然后,我尝试在amazon机器映像(AMI)上创建一个实例,新实例随着一个新EBS卷连接到该实例而启动

现在,当我使用我的密钥对通过ssh密钥登录到该实例的公共DNS地址时,命令如下

ssh -i aws/mykey.pem ubuntu@thepublicdnsname
上面说

ssh: connect to host <thepublickdnsname> port 22: Connection refused
ssh:连接到主机端口22:连接被拒绝
为什么会发生这种情况。我能够通过ssh使用相同的密钥连接到我的第一个实例。现在,新实例是完全相同的副本,我无法登录到它。在这方面有什么帮助吗?我错过什么了吗


我使用相同的密钥对从AMI创建第二个新实例。

我发现EC2实例出现并初始化需要不同的时间。一个是从调用ec2运行实例到实例状态从“挂起”变为“运行”之间的时间。在这之后,ssh服务器准备就绪还有额外的时间。这段时间可能只有几分钟

这可能不是原始问题的答案,但由于这是谷歌关于EC2连接问题的最重要部分,请确保按照以下说明配置您的安全组,以允许SSH2从您的机器上发送:


连接被拒绝端口22错误的另一个潜在原因是公共dns名称拼写错误。例如,我的一部分包含
.compute.
,我将
.computer.
放入其中,它给了我一个端口22错误,而不是像主机不存在这样更合理的错误。

是否检查了实例的ip地址?我的每次运行都会更改,除非我选择了固定ip。

AWS需要时间从AMI中调出一个实例。如果你试图连接得太快、太频繁,盒子将无法响应。下面的完整脚本启动AMI,确定IP地址,并等待系统准备好连接。对于接近或低于当前定价的现货实例,这将非常有效,因为连接所需的时间可能差异很大

当sleep语句被注释掉时,以下循环导致连接拒绝错误,并且在实例启动后它开始得太快。它还消耗了脚本服务器上的大量CPU,并生成了大量错误日志

   `nc -z $ip_address -w 20 22` 1>/dev/null 2>&1; result=$?;
    while [ $result -eq 1 ]
      do
      #echo $ip_address booting
      `nc -z $ip_address -w 30 22` 1>/dev/null 2>&1; result=$?;
      sleep 30
    done

下面是一个完整的脚本,用于启动一个实例,标记它,等待它完全启动,然后连接

 instance_id=$(aws ec2 run-instances --region us-east-1 --count 1 --instance-type $AMItype --image-id $ami --security-group-ids $sg_group --output text --query 'Instances[*].InstanceId' )

 aws ec2 create-tags --resources $instance_id --tags "Key=Name, Value=$AMIname
 #delay until AWS says instance is running
 start_state=0
 while [ $start_state -ne 16 ]
        do
         start_state=$(aws ec2 start-instances --instance-ids $instance_id --query 'StartingInstances[*].PreviousState[*].Code[*]' )
         start_state=$(echo $start_state | tr -d '" []')
         sleep 10
 done
 ip_address=$(aws ec2 describe-instances --instance-ids $instance_id --output text --query 'Reservations[*].Instances[*].PrivateIpAddress')

 `nc -z $ip_address -w 20 22` 1>/dev/null 2>&1; result=$?;
        while [ $result -eq 1 ]
          do
           #waiting for routing updates and connectivity
           `nc -z $ip_address -w 30 22` 1>/dev/null 2>&1; result=$?;
           sleep 30
        done

我也有同样的问题:我的问题是我有一个卷连接到我的实例,然后我分离该卷并将其删除。我随后装载了我的实例并编辑了/etc/fstab。这就是问题所在:当卷被分离并且您尝试重新启动(或停止并启动)实例时,它会转到该文件并尝试连接不存在的卷,而ssh守护进程不会启动

解决方案是:我必须创建另一个实例,将卷从有问题的实例中分离,然后编辑装入的\u点/etc/fstab文件,对其试图装入不存在的实例的行进行注释,将卷重新附着到有问题的实例,然后一切正常。

我有不同的想法(老实说,非常愚蠢)问题。将此答案张贴在此处,以防对其他人有所帮助

作为调试的一部分,我启动了两个新实例,它们都无法连接,所以我只是重新启动了我的机器

它现在可以工作了



我遇到了类似的问题,我注意到该实例是使用paravirtual的虚拟化创建的,在使用hvm重新创建后,问题得到了解决。

您是否检查了“控制台输出”?否。我必须检查它。但是,如果我无法通过terminal@Anand这有什么问题?你是怎么解决的t?我也面临着同样的问题。我的实例附带的安全组确实允许入站SSH连接。很好,这对我很有效,谢谢。我没有注意到公共DNS已经更改。尝试让你的答案更通用,而不是个人体验,这样对其他人更有帮助。使用第二人称(“你”)而不是第一人称(“我”)例如,这对我很有效,谢谢。以下是一些更容易遵循的说明。1.停止断开的实例并分离根卷。2.将根卷连接到其他实例,ssh连接到新实例,装载卷并更新/etc/fstab。3.从运行的实例分离卷,然后重新连接到旧broken instance.4.启动旧的已损坏实例。是的-谢谢!我更改了装载目标,因此在重新启动后失去了ssh访问权限。此过程可以用另一个实例修复
/etc/fstab
,并将旧实例恢复到良好的工作状态。CheersI也处于相同的情况。我的直觉告诉我,它必须比这个更复杂但事实并非如此。几分钟后,我可以通过ssh连接到我的新实例。