Отказ в подключении к 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 настроены правильно.