Jak ustawić domyślną nazwę użytkownika / hasło Ansible dla połączenia SSH?

59

Korzystam z Ansible i mam tę konfigurację w moim ekwipunku / wszystkie:

[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

Nie chcę powtarzać wszystkich parametrów dla każdej nowej instancji. Jak mogę je skonfigurować tylko w jednym miejscu? Czy jest plik z tymi parametrami?

Robert
źródło
3
~/.ssh/config
ceejayoz
1
@ceejayoz Czy mógłbyś trochę wyjaśnić
Robert
Nie jestem administratorem Ansible, a dokumenty są pochmurne na ten temat (czy jest to „zmienna” czy „parametr” i czy jest różnica? ), Ale wygląda na to, że można w jakiś sposób zdefiniować zmienne na poziomie grupy.
DerfK

Odpowiedzi:

73

Możesz dodać następującą sekcję do pliku ekwipunku:

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

Uwaga: Przed ansibl 2.0 ansible_userbyło ansible_ssh_user.

Alexey Labzov
źródło
2
Powyżej Ansible 2.0 powinno być: [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
zx1986
2
@ zx1986 gdzie to przeczytałeś?
030
2
@ 030 tutaj: docs.ansible.com/ansible/…
zx1986
Zauważ, że port 22 jest domyślny ansible_port, więc nie musisz go jawnie określać, chyba że jest inny. Zainteresowany, jeśli ktoś wie, jak zastosować zmienne do więcej niż jednej grupy na raz (ale nie „wszystkie”), rozdzielanie przecinków nie działa.
William Turrell
1
@ WilliamTurrell trochę późno, ale .. możesz utworzyć grupę grup (z modyfikatorem: dzieci), a następnie ustawić zmienne (z modyfikatorem: vars).
Lasse Halberg Haarbye
23

Zmienne grupowe

Możesz ustawić zmienne, które mają zastosowanie do wszystkich hostów, używając układu poradnika określonego w dokumencie najlepszych praktyk Ansible i tworząc group_vars/allplik, w którym je definiujesz .

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

[edytuj] Jestem jednak zdezorientowany tym, co próbujesz zrobić. Nie trzeba podawać użytkownika Ansible ani hasła w inwentarzu. Jeśli używasz Vagrant, zdecydowanie tego nie robisz, a jeśli dzwonisz do Ansible z wiersza poleceń, możesz podać użytkownika --user=vagranti poprosić go o podanie hasła --ask-pass.

Philip Wilson
źródło
1
Potrzebuję tylko lepszej organizacji mojej infrastruktury. Jeśli zawsze użyję włóczęgi: włóczęga Chcę umieścić konfigurację w miejscu, w którym domyślnie ładuje się Ansible, ale nie wiem gdzie. Każde połączenie, które ma zostać wykonane, musi z niego korzystać.
Robert
Czy plik musi mieć nazwę, group_vars/all/main.ymlczy po prostu group_vars/all?
realtebo,
ten zadziałał dla mnie po instalacji sshpass-"you must install the sshpass program"
user9869932
1
@realtebo Plik musi mieć nazwę group_vars/all.
xloto
1
-k dla zapytania o przepustkę nie jest dobrą zabawą dla „wszystkich”, gdy każdy host ma inne hasło. Tak, potrzebujesz sshpass i tak, prawdopodobnie potrzebujesz seedować znane_hosty, jeśli nigdy nie łączyłeś się przed ~ \ .ssh \ config jest właściwą drogą.
mckenzm
5

Myślę, że lepiej jest użyć instalacji klucza ssh na wszystkich serwerach w ciągu ściągania. Powinieneś uruchomić ssh-copy-id tylko dla każdego węzła i zainstalować klucz ssh wszędzie, aby Ansible mógł zalogować się przy użyciu twojego klucza ssh. Bezpieczniej będzie nie zapisywać haseł w podręczniku / ekwipunku.

W tym celu należy wygenerować parę kluczy ssh i następnie uruchomić ssh-copy-id dla wszystkich serwerów.

podarok
źródło
1
Jeśli ktoś może ukraść hasło z pliku konfiguracyjnego, prawdopodobnie będzie w stanie również użyć kluczy ssh. I to nie ma nic wspólnego z odpowiedzią na pytanie PO. To pytanie nie wymagało opinii na temat alternatyw.
Muh Fugen,
@MuhFugen> Jak mogę je skonfigurować tylko w jednym miejscu? Czy jest plik z tymi parametrami? To jest dokładne zdanie, które pozostawia drzwi do opinii, a reakcja daje zrozumienie właściwego kierunku. Konfiguracja kradzieży (która mogłaby gdzieś żyć w repozytorium git) nie jest tym samym, co kradzież klucza prywatnego.
podarok
4

Dodaj poniżej do hostów zasobów reklamowych.

Dla Ansible <2.0:

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

Dla 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
Mithril
źródło
Łącze wspomina ansible_ssh_pass, nie ansible_pass.
Matthias Weiler
2

Oświadczenie: Testowałem to tylko na OSX. Na podstawie różnych dokumentów oczekuję, że będzie działał na innych platformach.

„katalog projektu” odnosi się do katalogu podstawowego projektu Vagrant - katalogu, który zawiera Vagrantfile.

Plik ekwipunku Ansible automatycznie wygenerowany przez Vagrant:

Vagrant tworzy plik ekwipunku z domyślnymi zmiennymi połączeń Ansible. Poszukaj tego w <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

W razie potrzeby plik Vagrant zostanie ponownie wygenerowany, więc ręczne zmiany zostaną zastąpione. Jednak zgodnie z dokumentami Vagrant można określić wiele komputerów, zmiennych grupowych itp. VagrantfileI zostaną one dodane do tego pliku ekwipunku.

Skonfiguruj domyślnie Ansible do tego pliku wykazu:

Aby ustawić ten plik jako domyślny używany przez ansiblepolecenie, gdy jesteś w katalogu projektu (na hoście), dodaj ansible.cfgplik do katalogu projektu z tą zawartością, zmieniając ścieżkę w razie potrzeby:

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

Aby potwierdzić, że ten plik zapasów jest używany, poszukaj go jako domyślnego zgłoszonego przez ansible:

(z katalogu projektu)

$ 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

Aby potwierdzić hosting:

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

Korzystanie z Ansible z tymi hostami:

W katalogu projektu powinieneś być w stanie ansiblenormalnie korzystać z hostów, które zdefiniowałeś Vagrantfile.

Na przykład:

ansible slave -a 'hostname'
kentr
źródło