Назад | Перейти на главную страницу

Как установить имя пользователя / пароль Ansible по умолчанию для SSH-соединения?

Я использую Ansible, и у меня в инвентаре есть такая конфигурация:

[master]
192.168.1.10 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[slave]
192.168.1.11 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
192.168.1.12 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[app]
192.168.1.13 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

[all:children]
master
slave

Я не хочу повторять все параметры для каждого нового экземпляра. Как их настроить в одном месте? Есть ли файл с этими параметрами?

Вы можете добавить в свой инвентарный файл следующий раздел:

[all:vars]
ansible_connection=ssh
ansible_user=vagrant
ansible_ssh_pass=vagrant

Примечание: До Ansible 2.0 ansible_user был ansible_ssh_user.

Групповые переменные

Вы можете установить переменные, которые применяются ко всем хостам, используя макет playbook указано в Ansible Лучшие практики документ и создание group_vars/all файл, где вы определить их.

---
# file: group_vars/all
ansible_connection: ssh 
ansible_ssh_user: vagrant 
ansible_ssh_pass: vagrant

[править] Я не совсем понимаю, что вы пытаетесь сделать. Вам не нужно указывать пользователя или пароль Ansible в инвентаре. Если вы используете Vagrant, вы определенно этого не делаете, и если вы вызываете Ansible из командной строки, вы можете указать пользователя с помощью --user=vagrant и попросить пароль с --ask-pass.

Я думаю, что лучше использовать установку ssh-ключа на всех серверах по запросу. Вы должны запускать ssh-copy-id только для каждого узла и устанавливать свой ssh-ключ везде, чтобы ansible мог войти в систему, используя ваш ssh-ключ. Будет безопаснее не сохранять пароли в playbook / инвентарь.

Для этого вам следует сгенерируйте свою пару ключей ssh и после этого запустите ssh-copy-id для всех серверов.

Добавьте ниже в список хостов.

Для Ansible <2.0:

[all:vars]
ansible_connection=ssh
ansible_ssh_user=vagrant 
ansible_ssh_pass=vagrant

Для Ansible> = 2.0:

[all:vars]
ansible_connection=ssh # actually default mode smart is OK
ansible_user=vagrant
ansible_pass=vagrant # or ansible_ssh_pass=vagrant

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

"каталог проекта" относится к базовому каталогу для проекта Vagrant - каталог, содержащий Vagrantfile.

Файл Ansible Inventory, автоматически созданный Vagrant:

Бродяга создает файл инвентаризации с переменными соединения Ansible по умолчанию. Ищите это в <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

Этот файл будет регенерирован Vagrant по мере необходимости, поэтому изменения, внесенные вручную, будут перезаписаны. Однако, согласно документации Vagrant, вы можете указать несколько машин, групповых переменных и т. Д. В Vagrantfile и они будут добавлены в этот инвентарный файл.

Настройте Ansible по умолчанию для этого файла инвентаризации:

Чтобы сделать этот файл используемым по умолчанию ansible когда вы находитесь в каталоге проекта (на хосте), добавьте ansible.cfg файл в каталоге вашего проекта с этим содержимым, при необходимости изменив путь:

[defaults]
inventory = ./path/to/inventory

Чтобы убедиться, что этот файл инвентаризации используется, найдите его как значение по умолчанию, о котором сообщает ansible:

(из каталога проекта)

$ ansible | grep inventory ERROR! Missing target hosts -i INVENTORY, --inventory-file=INVENTORY specify inventory host path (default=./.vagrant/provis ioners/ansible/inventory/vagrant_ansible_inventory) or

Чтобы подтвердить своих хозяев:

$ ansible all --list-hosts hosts (2): master slave

Использование Ansible с этими хостами:

Из каталога проекта вы сможете использовать ansible как обычно с хостами, которые вы определили в Vagrantfile.

Например:

ansible slave -a 'hostname'

Вы должны установить правильные переменные. Вам нужно использовать:

# yml syntax
ansible_user: myusername
ansible_password: mypassword

# inventory syntax
host ansible_user=myusername ansible_password=mypassword

Читать нужно очень внимательно, потому что ansible_ssh_password и ansible_ssh_user не работают в версии: ansible 2.9.6

Ниже приведены инструкции по установке имени пользователя / пароля Ansible по умолчанию для SSH-соединения.

Конфигурация ansible.cfs будет

$ cat ansible.cfg
[defaults]
inventory = ./inventory

[privilege_escalation]
become = True
become_method = sudo
become_user = root

Файл инвентаризации будет

$ cat inventory
[App1]
10.163.128.21

[App1:vars]
ansible_password=*************
ansible_ssh_user=Appuser1
host_key_checking=False

доступный результат успешного выполнения

$ ansible App1 -m ping
10.163.128.21 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}