Ansible доступ к серверу EL9 после его ‘повышения’ с EL8

Вопрос или проблема

Спасибо, что уделили время и посмотрели,

Недавно я обновил (проект AlmaLinux ELevate) 3 сервера с AlmaLinux 8 до AlmaLinux 9 (2 года назад эти же серверы были переведены с CentOS 7 на AlmaLinux 8). Обновление прошло flawlessly, и после обновления мне нужно было переустановить только 1 пакет, Zabbix-Agent2. Я мог получить доступ к сервисам на этих серверах, веб-сайты были идеально доступны, по SSH у меня не было проблем с доступом к системе. даже ansibleuser мог быть использован для аутентификации по ssh с помощью ключевой пары без проблем. Но когда я использую ansible для запуска плейбука на этих серверах, который всегда работал в прошлом и все еще работает на всех наших других машинах с Ubuntu и AlmaLinux, я получаю следующие ошибки на 3 машинах:

[ /etc/ansible ]$ ansible-playbook playbooks/update-linux.yml -C -l ClamAV -vvv
ansible-playbook [core 2.14.14]
  конфигурационный файл = /etc/ansible/ansible.cfg
  настроенный модуль поиска = ['/home/ansibleuser/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  местоположение модуля ansible python = /usr/lib/python3.9/site-packages/ansible
  местоположение коллекции ansible = /home/ansibleuser/.ansible/collections:/usr/share/ansible/collections
  местоположение исполняемого файла = /usr/bin/ansible-playbook
  версия python = 3.9.18 (основная, 23 августа 2024 года, 00:00:00) [GCC 11.4.1 20231218 (Red Hat 11.4.1-3)] (/usr/bin/python3)
  версия jinja = 3.1.2
  libyaml = True
Используя /etc/ansible/ansible.cfg в качестве конфигурационного файла
BECOME пароль: 
[WARNING]: Ошибка при загрузке файла пароля хранилища (по умолчанию): Необходимо указать пароль хранилища для расшифровки данных
Пароль хранилища: 
host_list отказался от разбора /etc/ansible/hosts, так как он не прошел метод verify_file()
script отказался от разбора /etc/ansible/hosts, так как он не прошел метод verify_file()
auto отказался от разбора /etc/ansible/hosts, так как он не прошел метод verify_file()
Разобран /etc/ansible/hosts источник инвентаризации с помощью yaml плагина
Пропуская обратный вызов 'default', так как у нас уже есть стандартный вывод.
Пропуская обратный вызов 'minimal', так как у нас уже есть стандартный вывод.
Пропуская обратный вызов 'oneline', так как у нас уже есть стандартный вывод.

PLAYBOOK: update-linux.yml *******************************************************************************************************************************
2 игры в playbooks/update-linux.yml

PLAY [landauer] ******************************************************************************************************************************************

TASK [Сбор фактов] ***********************************************************************************************************************************
путь задачи: /etc/ansible/playbooks/update-linux.yml:2
<10.1.1.22> УСТАНАВЛИВАЕМ SSH СОЕДИНЕНИЕ ДЛЯ ПОЛЬЗОВАТЕЛЯ: ansibleuser
<10.1.1.22> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ansibleuser"' -o ConnectTimeout=5 -o 'ControlPath="/home/ansibleuser/.ansible/cp/267bb41463"' 10.1.1.22 '/bin/sh -c '"'"'echo ~ansibleuser && sleep 0'"'"''
<10.1.1.22> (0, b'/home/ansibleuser\n', b'')
<10.1.1.22> УСТАНАВЛИВАЕМ SSH СОЕДИНЕНИЕ ДЛЯ ПОЛЬЗОВАТЕЛЯ: ansibleuser
<10.1.1.22> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ansibleuser"' -o ConnectTimeout=5 -o 'ControlPath="/home/ansibleuser/.ansible/cp/267bb41463"' 10.1.1.22 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansibleuser/.ansible/tmp `"&& mkdir "` echo /home/ansibleuser/.ansible/tmp/ansible-tmp-1728362452.3175566-4768-111779545868462 `" && echo ansible-tmp-1728362452.3175566-4768-111779545868462="` echo /home/ansibleuser/.ansible/tmp/ansible-tmp-1728362452.3175566-4768-111779545868462 `" ) && sleep 0'"'"''
<10.1.1.22> (0, b'ansible-tmp-1728362452.3175566-4768-111779545868462=/home/ansibleuser/.ansible/tmp/ansible-tmp-1728362452.3175566-4768-111779545868462\n', b'')
<ClamAV> Попытка обнаружить интерпретатор python
<10.1.1.22> УСТАНАВЛИВАЕМ SSH СОЕДИНЕНИЕ ДЛЯ ПОЛЬЗОВАТЕЛЯ: ansibleuser
<10.1.1.22> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ansibleuser"' -o ConnectTimeout=5 -o 'ControlPath="/home/ansibleuser/.ansible/cp/267bb41463"' 10.1.1.22 '/bin/sh -c '"'"'echo PLATFORM; uname; echo FOUND; command -v '"'"'"'"'"'"'"'"'python3.11'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.10'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.9'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.8'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.5'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python3'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/libexec/platform-python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python'"'"'"'"'"'"'"'"'; echo ENDFOUND && sleep 0'"'"''
<10.1.1.22> (0, b'PLATFORM\nLinux\nFOUND\n/usr/bin/python3.9\n/usr/bin/python3\n/usr/libexec/platform-python\n/usr/bin/python\n/usr/bin/python\nENDFOUND\n', b'')
<10.1.1.22> УСТАНАВЛИВАЕМ SSH СОЕДИНЕНИЕ ДЛЯ ПОЛЬЗОВАТЕЛЯ: ansibleuser
<10.1.1.22> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ansibleuser"' -o ConnectTimeout=5 -o 'ControlPath="/home/ansibleuser/.ansible/cp/267bb41463"' 10.1.1.22 '/bin/sh -c '"'"'/usr/bin/python3.9 && sleep 0'"'"''
<10.1.1.22> (0, b'{"platform_dist_result": [], "osrelease_content": "NAME=\\"AlmaLinux\\"\\nVERSION=\\"9.4 (Seafoam Ocelot)\\"\\nID=\\"almalinux\\"\\nID_LIKE=\\"rhel centos fedora\\"\\nVERSION_ID=\\"9.4\\"\\nPLATFORM_ID=\\"platform:el9\\"\\nPRETTY_NAME=\\"AlmaLinux 9.4 (Seafoam Ocelot)\\"\\nANSI_COLOR=\\"0;34\\"\\nLOGO=\\"fedora-logo-icon\\"\\nCPE_NAME=\\"cpe:/o:almalinux:almalinux:9::baseos\\"\\nHOME_URL=\\"https://almalinux.org/\\"\\nDOCUMENTATION_URL=\\"https://wiki.almalinux.org/\\"\\nBUG_REPORT_URL=\\"https://bugs.almalinux.org/\\"\\n\\nALMALINUX_MANTISBT_PROJECT=\\"AlmaLinux-9\\"\\nALMALINUX_MANTISBT_PROJECT_VERSION=\\"9.4\\"\\nREDHAT_SUPPORT_PRODUCT=\\"AlmaLinux\\"\\nREDHAT_SUPPORT_PRODUCT_VERSION=\\"9.4\\"\\nSUPPORT_END=2032-06-01\\n"}\n', b'')
Используя модульный файл /usr/lib/python3.9/site-packages/ansible/modules/setup.py
<10.1.1.22> PUT /home/ansibleuser/.ansible/tmp/ansible-local-47643ehs1jje/tmprhb1042q TO /home/ansibleuser/.ansible/tmp/ansible-tmp-1728362452.3175566-4768-111779545868462/AnsiballZ_setup.py
<10.1.1.22> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ansibleuser"' -o ConnectTimeout=5 -o 'ControlPath="/home/ansibleuser/.ansible/cp/267bb41463"' /home/ansibleuser/.ansible/tmp/ansible-local-47643ehs1jje/tmprhb1042q '[10.1.1.22]:/home/ansibleuser/.ansible/tmp/ansible-tmp-1728362452.3175566-4768-111779545868462/AnsiballZ_setup.py'
<10.1.1.22> УСТАНАВЛИВАЕМ SSH СОЕДИНЕНИЕ ДЛЯ ПОЛЬЗОВАТЕЛЯ: ansibleuser
<10.1.1.22> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="ansibleuser"' -o ConnectTimeout=5 -o 'ControlPath="/home/ansibleuser/.ansible/cp/267bb41463"' 10.1.1.22 '/bin/sh -c '"'"'rm -f -r /home/ansibleuser/.ansible/tmp/ansible-tmp-1728362452.3175566-4768-111779545868462/ > /dev/null 2>&1 && sleep 0'"'"''
<10.1.1.22> (0, b'', b'')
фатальная ошибка: [ClamAV]: НЕДОСТУПЕН! => {
    "changed": false,
    "msg": "Не удалось подключиться к хосту через scp: Соединение закрыто\r\n",
    "unreachable": true
}

В примере я использовал сервер ClamAV, но на 2 других серверах у меня такая же проблема.

Другие машины AlmaLinux в нашей настройке были установлены с нуля с AlmaLinux 9, и плейбук работает нормально.

Я также заметил, что при запуске DNF выдает мне 1 предупреждение:
предупреждение: Подпись не поддерживается. Алгоритм хеширования SHA1 недоступен.
Я уже нашел статью об этом на redHat, в которой объясняется, что с помощью команды: “update-crypto-policies –set FUTURE” я мог бы установить сервер на более новую криптополитику SHA256/512. Но тогда я теряю ВСЕ возможные коммуникации с этим сервером, кроме HTTP(s) и физической консоли (через vCenter). Я думаю, это должно быть связано с этим, или мне нужно что-то перегенерировать. Но есть ли кто-то, кто уже нашел решение/тему, чтобы помочь мне решить эту проблему? У меня есть еще 2 сервера, которые немного более критичны для компании, поэтому не хочу, чтобы они долго страдали от этой проблемы.

Большое спасибо за любую помощь.

Ах, я нашел различие в файле sshd_config:
На старой машине, обновленной с CentOS на EL8 –> EL9, строка: Subsystem sftp /usr/lib/openssh/sftp-server, а на других ново установленныx машинах AlmaLinux она установлена на: Subsystem sftp internal-sftp. После изменения параметра и перезапуска сервиса все снова заработало как должно.
Я хочу поблагодарить форум AlmaLinux за предоставленные подсказки.

Ответ или решение

Конечно! Вот полный ответ на вопрос, касающийся доступа Ansible к серверу EL9 после его обновления с EL8.


Проблема доступа Ansible к серверам после обновления с EL8 на EL9

Здравствуйте!

Судя по вашему описанию, проблема, с которой вы столкнулись, вызывает ошибки при выполнении Ansible playbook’ов на ваших серверах AlmaLinux 9, которые были обновлены с AlmaLinux 8. Вы упомянули о том, что установка прошла гладко, однако возникли ошибки при использовании Ansible.

Возможные причины и их решения:

  1. Проблемы с настройками SSH:
    Ошибка "Failed to connect to the host via scp: Connection closed" указывает на проблемы с подключением по протоколу SCP (Secure Copy Protocol), который используется Ansible для передачи файлов во время выполнения плейбуков.

    Обратите внимание на разницу в файле конфигурации sshd_config между вашими серверами. Вы заметили, что у ваших обновленных серверов строка:

    Subsystem sftp /usr/lib/openssh/sftp-server

    На новых установках стоит:

    Subsystem sftp internal-sftp

    Изменив эту строку на internal-sftp и перезапустив службу SSH, вы ощутили улучшение. Замена на internal-sftp должна улучшить поддержку SFTP в Ansible и устранить похожие проблемы.

  2. Проблемы с криптографическими политиками:
    Вы также упомянули предупреждение "Signature not supported. Hash algorithm SHA1 not available." при использовании DNF. Обновление криптографических политик, используя команду:

    update-crypto-policies --set FUTURE

    может ограничить доступность некоторых более старых методов аутентификации, что может быть связано с вашими трудностями при подключении к серверам.

    После изменения криптографической политики, необходимо убедиться, что SSH на ваш сервер поддерживает необходимые алгоритмы. Вам может потребоваться изменить параметры в файле sshd_config, такие как Ciphers, MACs, чтобы дополнительно разрешить доступ по новым стандартам.

  3. Аутентификация и настройки Ansible:
    Убедитесь, что ваша конфигурация Ansible настроена правильно и не требует дополнительных модификаций для работы с новыми параметрами SSH. Проверьте, что ваш пользователь (ansibleuser) имеет нужные разрешения и возможность выполнения команд по SSH без необходимости ввода пароля.

Заключение:

С учетом ваших наблюдений и описанных изменений, кажется, вы на правильном пути к восстановлению функциональности Ansible. Изменение параметров SFTP и возможные обновления в конфигурации SSH могут устранить возникшие проблемы. Если у вас остаются сложности, считаю полезным также проверить логи SSH для более детальной диагностики.

Если нужны дополнительные рекомендации или помощь, дайте знать!

С уважением,
[Ваше Имя],
Эксперт по системам и DevOps.

Оцените материал
Добавить комментарий

Капча загружается...