Мы используем Amazon Elastic Compute Services для раскрутки кластера с автоматически масштабируемыми группами. До недавнего времени это работало нормально, и в целом оно все еще работает нормально ... За исключением того, что мы больше не можем подключаться к базовым экземплярам EC2, используя SSH с нашей парой ключей. Мы получаем ssh разрешение отклоненных ошибок, что является относительно (неделями) новым, и мы ничего не изменили. Напротив, мы можем раскрутить экземпляр EC2 напрямую и без проблем использовать SSH с той же парой ключей.
Что я сделал для исследования:
- Слить кластер ECS, отсоединенныйэкземпляр от него и остановил его.
- Отключил корневой том экземпляра и подключил его к другому экземпляру EC2.
- Заметил, что
/home/ec2-user/.ssh
не существует. - Нашел следующую ошибку в экземпляре /var/log/cloud-init.log:
Oct 30 23:23:09 cloud-init[3195]: handlers.py[DEBUG]: start: init-network/config-ssh: running config-ssh with frequency once-per-instance
Oct 30 23:23:09 cloud-init[3195]: util.py[DEBUG]: Writing to /var/lib/cloud/instances/i-0e13e9da194d2624a/sem/config_ssh - wb: [644] 20 bytes
Oct 30 23:23:09 cloud-init[3195]: helpers.py[DEBUG]: Running config-ssh using lock (<FileLock using file '/var/lib/cloud/instances/i-0e13e9da194d2624a/sem/config_ssh'>)
Oct 30 23:23:09 cloud-init[3195]: util.py[WARNING]: Applying ssh credentials failed!
Oct 30 23:23:09 cloud-init[3195]: util.py[DEBUG]: Applying ssh credentials failed!
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/cloudinit/config/cc_ssh.py", line 184, in handle
ssh_util.DISABLE_USER_OPTS)
AttributeError: 'module' object has no attribute 'DISABLE_USER_OPTS'
Oct 30 23:23:09 cloud-init[3195]: handlers.py[DEBUG]: finish: init-network/config-ssh: SUCCESS: config-ssh ran successfully
Изучил исходный код Python для /usr/lib/python2.7/site-packages/cloudinit. Это выглядит хорошо для меня;Я вижу ссылку в config / cc_ssh.py на
ssh_util.DISABLE_USER_OPTS
, и похоже, что
ssh_util.py
действительно содержит DISABLE_USER_OPTS в качестве переменной уровня файла. (Но я не главный программист на Python, поэтому мне может не хватать чего-то тонкого.) Любопытно, что скомпилированные версии ssh_util.py и cc_ssh.py датируются 16 октября, что вызывает все виды красных флаговпотому что мы не видели никаких проблем с ssh до недавнего времени. Но я загрузил uncompyle6 и декомпилировал эти файлы, и декомпилированные версии
кажутся тоже нормальными.
Глядя на cloud-init, довольно ясно, что если ссылка на ssh_util.DISABLE_USER_OPTS
выдает исключение, каталог .ssh не будет настроен для ec2-пользователя, поэтому я понимаю, что происходит.
Что я не понимаю, почему? Кто-нибудь еще испытывал проблемы с cloud-init с недавно созданными инстансами EC2 под ECS и нашел решение?
Для справки мы используем AMI amzn2-ami-ecs-hvm-2.0.20190815-x86_64-ebs (ami-0b16d80945b1a9c7d) в us-east-1, и мы, конечно, не видели эти проблемы еще 15 августа. Я предполагаю, что некоторые изменения в облачном инициализации, которые получает экземпляр через yum update
, объясняют новое поведение иизмените даты записи скомпилированных модулей Python в cloud-init.
Я также должен добавить, что экземпляр EC2, который я развернул для монтирования корневого тома созданного ECS экземпляра, слегка отличается от cloud-initкод. В частности, модуль cc_ssh.py не ссылается на ssh_util.DISABLE_USER_OPTS
, а скорее на локальную переменную DISABLE_ROOT_OPTS
. Так что это все подозрительно.