Назад | Перейти на главную страницу

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

Эта проблема

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

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

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

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

После запуска машины постоянно получаю Connection refused ошибка при подключении к нему ssh. Я пробовал 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: соединение отклонено

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

Решение

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

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

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

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

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

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

Прикрепите и смонтируйте свой том к другой виртуальной машине и создайте на нем файл, например /whatever_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 настроены правильно.