Вопрос или проблема
Свежая 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-подключении к вашим серверам, несмотря на то что она доступна в локальной среде. Давайте подробно разберем возможные причины и решения этой проблемы.
Причины проблемы
-
Переменная окружения PATH: Наиболее вероятная причина ошибки
-bash: ansible-playbook: command not found
заключается в том, что переменная окруженияPATH
, которая определяет список директорий для поиска исполняемых файлов, отличается при локальном входе и при SSH-подключении. Это может произойти, если в файлах конфигурации оболочки (например,.bashrc
,.bash_profile
или.profile
) определены пути, которые не загружаются при SSH-подключении. -
Профиль пользователя: При локальном входе в систему могут загружаться дополнительные настройки и профили, которые не отображаются при SSH, особенно если вы используете не интерактивную оболочку.
-
Конфигурация SSH: SSH может не загружать определенные настройки при подключении, что в свою очередь может повлиять на приложение необходимых переменных окружения.
Решение проблемы
-
Проверка переменной PATH: Сравните значение переменной
PATH
на локальной машине и на машине, к которой вы подключаетесь по SSH. Введите следующую команду в обоих случаях:echo $PATH
Если PATH, используемый при локальном входе, включает путь к каталогу, где установлен
ansible-playbook
, например/usr/local/bin
или/usr/bin
, а при SSH – нет, это и есть причина проблемы. -
Настройка профиля пользователя:
- Убедитесь, что файл, содержащий настройки для вашей оболочки (например,
.bashrc
или.bash_profile
), корректно загружается. Вы можете добавить в.bashrc
следующую строку для обновления переменнойPATH
:
export PATH="$PATH:/usr/local/bin:/usr/bin"
- После этого перезагрузите сессию SSH или выполните следующие команды:
source ~/.bashrc
- Убедитесь, что файл, содержащий настройки для вашей оболочки (например,
-
Разрешение для использования пользовательской среды: Если проблема заключается в конфигурации SSH, вы можете включить
PermitUserEnvironment
в конфигурации SSH-сервера. Для этого:- Откройте файл
/etc/ssh/sshd_config
и добавьте или измените следующую строку:
PermitUserEnvironment yes
- После внесения изменений необходимо перезапустить SSH-сервер:
sudo systemctl restart sshd
- Откройте файл
Заключение
После выполнения подготовительных шагов рекомендуется протестировать выполнение команды ansible-playbook
еще раз через SSH. В большинстве случаев проблема должна быть решена при корректной настройке переменной PATH
и конфигураций.
Понимание и управление средой выполнения — это ключевые аспекты успешного администрирования систем, особенно когда дело касается автоматизации и работы с такими инструментами, как Ansible. Применив указанные выше методы, вы сможете оптимизировать вашу работу с Ansible и повысить эффективность процессов автоматизации.