Отказ в подключении к Ubuntu EC2 после расширения EBS

Эта проблема

После запуска экземпляра Ubuntu 14.04 EC2 с расширенными томами HD, ssh-в него невозможно Connection refused,

Процесс расширения EBS

На одном из моих компьютеров с Ubuntu 14.04 EC2 не хватало размера HD. Чтобы решить эту проблему, я следовал собственному руководству AWS по расширению HD:

  • Остановил машину
  • Отдельно оба тома
  • Сделал снимок обоих томов
  • Созданы большие тома из снимка
  • Прикрепил новые тома и завел машину

В дополнение к этому, я воспользовался возможностью добавить Elastic IP к машине, если это имеет значение.

После запуска машины я постоянно получаю Connection refused ошибка при сш-нии к нему. Я пробовал SSH из VPC для частного IP и извне. Я использовал оба XX.X.XXX.XX IP и ec2-XX-X-XXX-XX.compute-1.amazonaws.com DNS-имя и оригинал .pem ключ, который я скачал с AWS при создании, и ключ ssh, который я поместил в .ssh/authorized_keys машины.

Я получаю тот же ответ:

SSH: подключение к хосту ec2-XX-X-XXX-XX.compute-1.amazonaws.com порт 22: соединение отказано

Примечания / Что я пробовал

  • Я подключил тома к другому экземпляру и проверил их. Файлы есть.
  • Я пытался удалить из PermitRootLogin линии из /etc/ssh/sshd_config,
  • Я попытался подключиться к машине с помощью клиента Java в консоли EC2.
  • Я попытался подключить оригинальные тома к машине (до расширения). Я все еще получаю Connection refused,
  • Корневой том EBS подключен по адресу /dev/sda1,

Решение

Обновление: проблема решена. Большое спасибо всем здесь!

3 ответа

Решение

После сеанса поддержки в чате с поддержкой AWS мы выяснили проблему.

Я расширил два тома - /dev/sda1 а также /dev/sdf, Когда я подключил расширенные тома к машине, второй почему-то был подключен как другое устройство (/dev/sdgЕсли память мне не изменяет) Это вызвало некоторые проблемы с загрузкой и sshd никогда не подходил

Когда сторонник заметил несоответствие, я снова прикрепил том к /dev/sdf и все работало хорошо.

Спасибо всем за помощь - вы были великолепны!

Просто поместив этот грязный хакерский скрипт, я однажды использовал его для отладки (вам просто нужен python 2.xx, установленный на машине). Это грязно, но может помочь в любом случае!

Присоедините и смонтируйте свой том к другой виртуальной машине и создайте на нем файл, например, /whwhat_mount_path/you_like/cgi-bin/cmd.py (важен 'cgi-bin'), с содержимым, как показано ниже:

#!/usr/bin/env python
import os
br='<br/>'
print "Content-Type: text/html"
qs=os.environ['QUERY_STRING']
qs = {qs.split('=')[0]:qs.split('=')[1] for qs in   os.environ['QUERY_STRING'].split('&')}
print "cmd: ", qs ['cmd'], br*2
res = os.popen(qs['cmd']).read().replace('\n',br)
print res

затем в "/etc/rc.local" вашего тома добавьте следующие строки:

cd /path_to_cgi-bin   #should be the path to your cgi-bin directory created above, without the mount path
nohup python -m CGIHTTPServer 8000 >> nohup.out 2>&1 &

снова подключите ваш том к начальной машине и загрузите его. Теперь вы можете выполнять системные команды из своего веб-браузера, передавая cmd в виде строки запроса GET. например:

http://<YOUR VM IP>:8000/cgi-bin/cmd.py?cmd=netstat -ltpn | grep 22

который будет закодирован вашим браузером как:

http://<YOUR VM IP>:8000/cgi-bin/cmd.py?cmd=netstat%20-ltpn%20|%20grep%2022

просто убедитесь, что порт 8000 свободен и ваша группа безопасности настроена правильно

Connection refused как правило, означает, что на соответствующем IP: порт ничего не прослушивается. Обычно вы можете подтвердить это с помощью консоли OOB, чтобы войти в систему и запустить, например, netstat

netstat -tunlp | grep :22

подтвердил бы, что что-то слушало или не слушало порт 22.

Поскольку у вас, вероятно, нет консоли OOB, вы застряли с монтированием томов в другом экземпляре и копались в журналах и файлах конфигурации.

Убедитесь, что ваш sshd настроен на прослушивание на правильном интерфейсе (ах) и порте. Пока вы там, увеличьте LogLevel, чтобы при следующей загрузке вы получали больше информации.

Копаться во всех журналах и посмотреть, есть ли какие-либо соответствующие сообщения.

Я полагаю, вы также можете добавить в систему задание cron, просто отредактировав соответствующий файл и заставив его выполнить команду netstat. Я не использую Ubuntu, но что-то вроде

@reboot root netstat -tunlp >>/tmp/netstat.out

в /etc/crontab (или как там использует Ubuntu) будет получен снимок системы после загрузки

Хотя я ожидаю, что это даст другое сообщение об ошибке, убедитесь, что группы безопасности EC2 настроены правильно.

Другие вопросы по тегам