Отказано в соединении с запущенным экземпляром Amazon EC2 - PullRequest
28 голосов
/ 27 февраля 2011

Я создал экземпляр micro ec2.Установлены все необходимые веб-программы, MySQL и GIT.Создан AMI из этого экземпляра.Поскольку этот экземпляр использовал EBS в качестве корневого устройства, он также сделал снимок EBS при создании AMI.

Я остановил этот запущенный экземпляр.Затем я попытался создать экземпляр из образа машины Amazon (AMI), новый экземпляр запустился вместе с новым томом EBS, подключенным к экземпляру.

Теперь, когда я использую свою пару ключей для входа в этот экземпляр через мой ssh-ключ к его общедоступному DNS-адресу с помощью команды

ssh -i aws/mykey.pem ubuntu@thepublicdnsname

, она говорит

ssh: connect to host <thepublickdnsname> port 22: Connection refused

Почему это происходит.Я смог подключиться к своему первому экземпляру с помощью тех же ключей через ssh.Теперь новый экземпляр является точной копией, и я не могу войти в него.Любая помощь в этом ...?Я что-то упустил?

Я использовал те же пары ключей для создания второго нового экземпляра из AMI.

Ответы [ 8 ]

17 голосов
/ 29 февраля 2012

Я обнаружил, что для запуска и инициализации экземпляра EC2 требуется переменное количество времени.Одним из них является время между вызовом ec2-run-instance до тех пор, пока состояние экземпляра не изменится с «ожидающий» на «работающий».После этого есть дополнительное время, когда сервер ssh становится готовым.Это время может быть пару минут.

10 голосов
/ 05 августа 2015

У меня была та же проблема: моя проблема заключалась в том, что у меня был том, прикрепленный к моему экземпляру, затем я отсоединил том и удалил его. Я следовал aws docs , чтобы смонтировать мой экземпляр и отредактировал / etc / fstab. Это было проблемой: когда том отключен, и вы пытаетесь перезагрузить (или остановить и запустить) экземпляр, он переходит к этому файлу и пытается присоединить несуществующий том, а демон ssh не запускается.

Решение : мне пришлось создать другой экземпляр, отсоединить том от проблемного экземпляра, затем отредактировать файл mount_point / etc / fstab, чтобы прокомментировать строку, в которой он пытается смонтировать несуществующий экземпляр, присоединить Объем до проблемного экземпляра, а затем все работало нормально.

6 голосов
/ 26 апреля 2012

Вероятно, это не ответ на первоначальный вопрос, но, поскольку он находится на вершине Google по проблемам с подключением к EC2, обязательно настройте группу безопасности, чтобы разрешить SSH2 с вашего компьютера, согласно:

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

4 голосов
/ 09 февраля 2014

AWS требуется время, чтобы вызвать экземпляр из AMI. Если вы попытаетесь подключиться слишком быстро и слишком часто, окно не сможет ответить. Полный сценарий ниже запускает AMI, определяет IP-адрес и ждет, пока система не будет готова к подключению. Это будет очень хорошо работать для спотовых экземпляров, близких или ниже текущих цен, так как время, необходимое для подключения, может сильно различаться.

Следующий цикл вызвал ошибку отказа в соединении, когда оператор сна был закомментирован, и он начался слишком быстро после запуска экземпляра. Он также потреблял много ресурсов процессора на сервере сценариев и делал огромные журналы ошибок.

   `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
3 голосов
/ 22 июня 2013

Еще одна потенциальная причина отказа в соединении: ошибка порта 22 - неправильное написание имени общего DNS. Например, моя часть содержала .compute., и я поставил .computer., и это дало мне ошибку порта 22 вместо чего-то более разумного, такого как хост не существует.

2 голосов
/ 10 июля 2013

Вы проверили IP-адрес экземпляра? Мой меняется каждый раз, когда я запускаю его, если я не выбрал фиксированный ip.

0 голосов
/ 29 ноября 2018

Я столкнулся с подобной проблемой, я заметил, что экземпляр был создан с виртуализацией паравиртуального и после восстановления с помощью hvm проблема была решена.

0 голосов
/ 24 ноября 2016

У меня была другая (и, честно говоря, очень глупая) проблема.Публикация этого ответа здесь на случай, если он кому-то поможет.

В рамках отладки я запустил пару новых экземпляров, и ни один из них не смог подключиться, поэтому я просто перезагрузил свой компьютер!

Работает сейчас!: D


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...