После запуска экземпляра Ubuntu 14.04 EC2 с расширенными томами HD, ssh-ing в него не работает с Connection refused
.
На одной из моих машин с 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: соединение отклонено
PermitRootLogin
строки из /etc/ssh/sshd_config
.Connection refused
./dev/sda1
.Обновить: Проблема решена. Спасибо всем здесь!
После сеанса поддержки в чате со сторонником 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 настроены правильно.