Як встановити відповідне ім'я користувача / пароль для підключення SSH?


59

Я використовую Ansible, і я маю цю конфігурацію у своєму інвентарі / all:

[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

Я не хочу повторювати всі параметри для кожного нового екземпляра. Як я можу налаштувати їх лише в одному місці? Чи є файл з цими параметрами?


3
~/.ssh/config
— ceejayoz

1
@ceejayoz Не могли б ви пояснити трохи
— Роберт,

Я не адміністратор Ansible, і документи помутніли на тему ( це "змінна" чи "параметр" і чи є різниця? ), Але схоже, ви можете якось визначити змінні на рівні групи.
— DerfK

Відповіді:


73

Ви можете додати у свій інвентарний файл такий розділ:

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

Примітка: Перед тим як анзібль 2,0 ansible_userбуло ansible_ssh_user.


2
Вище відповіді 2.0 має бути так: [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
— zx1986

2
@ zx1986 де ти це читав?
— 030


Зауважте, що порт 22 є типовим для ansible_port, тому вам не потрібно чітко вказувати його, якщо не вказано інше. Цікавить, якщо хтось знає, як застосовувати змінні одночасно до декількох груп (але не «всіх»), схоже, розділення комами не працює.
— Вільям Террелл

1
@WilliamTurrell трохи пізно, але .. ви можете створити групу груп (з модифікатором: діти), а потім встановити змінні після цього (за допомогою модифікатора: vars).
— Lasse Halberg Haarbye

23

Групові змінні

Ви можете встановити змінні, які застосовуються до всіх хостів, використовуючи макет ігрової книги, вказаний у документі Best Practices Ansible, та створивши group_vars/allфайл там, де ви їх визначаєте .

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

[ред.] Я розгублений, хоча в тому, що ти намагаєшся зробити. Вам не потрібно вказувати відповідального користувача або пароль у інвентарі. Якщо ви використовуєте Vagrant, ви цього точно не робите, а якщо ви викликаєте Ansible з командного рядка, ви можете вказати користувача --user=vagrantта попросити його ввести пароль --ask-pass.


1
Мені потрібно лише зробити кращу організацію моєї інфраструктури. Якщо завжди я буду використовувати vagrant: vagrant, я хочу поставити його конфігурацію в якесь місце, де за замовчуванням завантажується Ansible, але я не знаю куди. Кожне з'єднання, яке потрібно виконати, повинно використовувати його.
— Роберт

Потрібно назвати файл group_vars/all/main.ymlабо просто group_vars/all?
— realtebo

цей працював для мене після встановлення sshpass-"you must install the sshpass program"
— user9869932

1
@realtebo Файл повинен бути названий group_vars/all.
— xloto

1
-k for ask pass - це не дуже задоволення для "всіх", коли кожен хост має інший пароль. Так, вам потрібен sshpass, і так, вам, ймовірно, потрібно надіслати відомі_хости, якщо ви ніколи не підключалися до ~ \ .ssh \ config - це шлях.
— mckenzm

5

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

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


1
Якщо хтось може вкрасти пароль з вашого файлу конфігурації, він, ймовірно, зможе і ваші ключі ssh. І це не має нічого спільного з відповіддю на питання ОП. Це питання не запитувало думки щодо альтернатив.
— Muh Fugen

@MuhFugen> Як я можу їх налаштувати лише в одному місці? Чи є файл із цими параметрами? Це точна фраза, яка залишає двері для думки, а відповідь дає розуміння правильного напрямку. Конфігурація крадіжки (яка могла б десь жити в git repo) - це не те, що красти приватний ключ.
— подарок

4

Додайте нижче до хостів рекламних ресурсів.

Для відповіді <2,0:

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

Для відповіді > = 2.0 :

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

Посилання згадує ansible_ssh_pass, ні ansible_pass.
— Маттіас Вайлер

2

Відмова: Я протестував це лише на OSX. Грунтуючись на різних документах, я очікую, що він буде працювати на інших платформах.

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

Файл відповідної інвентаризації, автоматично створений Vagrant:

Vagrant створює файл інвентаря з типовими варіантами з'єднання Ansible. Шукайте це в <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

Цей файл буде регенеровано програмою Vagrant за потребою, тому вручну редагування будуть перезаписані. Однак, згідно з документами Vagrant, ви можете вказати кілька машин, груп vars тощо тощо, Vagrantfileі вони будуть додані до цього інвентарного файлу.

Налаштувати відповідь за замовчуванням для цього файлу інвентаря:

Щоб цей файл використовувався 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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.