Мы используем 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 августа. что некоторое изменение cloud-init, которое экземпляр получает через yum update
, объясняет новое поведение и изменение дат записи скомпилированных модулей Python в cloud-init.
Я также должен добавить, что экземпляр EC2, который я создал для монтирования корневого тома экземпляра, созданного ECS, имеет несколько иной код cloud-init. В частности, модуль cc_ssh.py ссылается не на ssh_util.DISABLE_USER_OPTS
, а на локальную DISABLE_ROOT_OPTS
переменную. Так что все это подозрительно.