Як встановити відповідне ім'я користувача / пароль для підключення 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.