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

Ana*_*and 29 amazon-ec2

我创建了一个微型ec2实例.安装了所有必要的网络软件,mysql和git.从该实例中创建了一个AMI.由于该实例使用EBS作为其根设备,因此在创建AMI时也使用了EBS快照.

我终止了正在运行的实例.然后,我尝试创建一个亚马逊机器映像(AMI)的实例,新实例启动以及新的EBS卷附加到实例.

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

ssh -i aws/mykey.pem ubuntu@thepublicdnsname
Run Code Online (Sandbox Code Playgroud)

它说

ssh: connect to host <thepublickdnsname> port 22: Connection refused
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?我能够通过ssh使用相同的密钥连接到我的第一个实例.现在新实例是精确的副本,我无法登录它.对此有任何帮助......?我错过了什么吗?

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

Out*_*gic 18

我发现EC2实例需要花费不同的时间才能启动并初始化.一个是调用ec2-run-instances直到实例状态从"挂起"变为"正在运行"之间的时间.之后,ssh服务器准备就绪时还有一段时间.那个时间可能是几分钟.


小智 10

我有同样的问题:我的问题是我有一个卷附加到我的实例,然后我分离卷并删除它.我按照aws文档挂载我的实例并编辑/ etc/fstab.这就是问题:当卷分离并且您尝试重新启动(或停止并启动)实例时,它会转到此文件并尝试附加不存在的卷,并且ssh守护程序未启动.

解决方案是:我必须创建另一个实例,从有问题的实例中分离卷然后编辑mounted_point/etc/fstab文件来注释它试图挂载不存在的实例的行,重新挂接卷到有问题的实例然后它工作了一切精细.

  • 这对我有用,谢谢。以下是一些可能更容易遵循的说明。1. 停止损坏的实例并分离根卷。2. 将根卷附加到不同的实例,ssh 到新实例,挂载卷并更新 /etc/fstab。3. 将卷与正在运行的实例分离,然后重新连接到旧的损坏实例。4. 启动旧的损坏实例。 (2认同)

Ben*_*ton 6

这可能不是原始问题的答案,但由于这是针对EC2连接问题的Google的首要问题,因此请务必将安全组配置为允许来自您计算机的SSH2:

http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AccessingInstances.html#authorizing-access-to-an-instance


Mar*_*306 5

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
Run Code Online (Sandbox Code Playgroud)

这是一个完整的脚本,用于启动实例、标记它、等待它完全启动并连接。

 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
Run Code Online (Sandbox Code Playgroud)