-bash: ansible-playbook: команда не найдена

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

Свежая Fedora Server Netinstall. Обновлена. Установлены только последние версии Git и Ansible из стандартного репозитория.

Хочу выполнить Ansible на своем хосте (localhost), чтобы настроить его сам (не используя ansible-pull). Скопировал ssh-ключи. Подключился по SSH как не-root пользователь, но с правами root с какого-то удаленного компьютера, Git-pulled мой инвентаризационный файл Ansible.

$ ansible --version => ansible 2.9.6
$ python --version => Python 3.7.6

Итак, Ansible установлен и доступен. Однако при выполнении

ansible-paybook play/bastion.yml --tags nvim:install --ask-vault-pass

я получаю -bash: ansible-playbook: command not found. То же самое для других подкоманд.

Когда захожу на машину напрямую с тем же пользователем, ansible-playbook работает как ожидалось.

Что может быть не так с SSH-доступом к ней?

В идеале мне не нужно (не требуется) подключаться по SSH, потому что в конечном итоге я вызову ansible-pull. Это только для “отшлифовки” плейбуков на стандартной машине, потому что tty не очень удобно использовать.

Думаю, это проблема с переменной окружения path, что означает, что профиль пользователя не загружается при выполнении ssh, проверьте вашу PATH при выполнении ssh и без (локально) и сравните обе.

echo $PATH

Если это так, то проверьте ваш ssh конфигурационный файл и включите PermitUserEnvironment.

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

Проблема, с которой вы столкнулись, связана с тем, что команда ansible-playbook не может быть найдена при SSH-подключении к вашим серверам, несмотря на то что она доступна в локальной среде. Давайте подробно разберем возможные причины и решения этой проблемы.

Причины проблемы

  1. Переменная окружения PATH: Наиболее вероятная причина ошибки -bash: ansible-playbook: command not found заключается в том, что переменная окружения PATH, которая определяет список директорий для поиска исполняемых файлов, отличается при локальном входе и при SSH-подключении. Это может произойти, если в файлах конфигурации оболочки (например, .bashrc, .bash_profile или .profile) определены пути, которые не загружаются при SSH-подключении.

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

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

Решение проблемы

  1. Проверка переменной PATH: Сравните значение переменной PATH на локальной машине и на машине, к которой вы подключаетесь по SSH. Введите следующую команду в обоих случаях:

    echo $PATH

    Если PATH, используемый при локальном входе, включает путь к каталогу, где установлен ansible-playbook, например /usr/local/bin или /usr/bin, а при SSH – нет, это и есть причина проблемы.

  2. Настройка профиля пользователя:

    • Убедитесь, что файл, содержащий настройки для вашей оболочки (например, .bashrc или .bash_profile), корректно загружается. Вы можете добавить в .bashrc следующую строку для обновления переменной PATH:
    export PATH="$PATH:/usr/local/bin:/usr/bin"
    • После этого перезагрузите сессию SSH или выполните следующие команды:
    source ~/.bashrc
  3. Разрешение для использования пользовательской среды: Если проблема заключается в конфигурации SSH, вы можете включить PermitUserEnvironment в конфигурации SSH-сервера. Для этого:

    • Откройте файл /etc/ssh/sshd_config и добавьте или измените следующую строку:
    PermitUserEnvironment yes
    • После внесения изменений необходимо перезапустить SSH-сервер:
    sudo systemctl restart sshd

Заключение

После выполнения подготовительных шагов рекомендуется протестировать выполнение команды ansible-playbook еще раз через SSH. В большинстве случаев проблема должна быть решена при корректной настройке переменной PATH и конфигураций.

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

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

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