Come impostare nome utente / password Ansible predefiniti per la connessione SSH?


60

Sto usando Ansible e ho questa configurazione nel mio inventario / tutti:

[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

Non voglio ripetere tutti i parametri per ogni nuova istanza. Come posso configurarli in un unico posto? Esiste un file con questi parametri?


3
~/.ssh/config
Ceejayoz,

1
@ceejayoz Potresti spiegarci un po '
Robert,

Non sono un amministratore Ansible e i documenti sono poco chiari sull'argomento ( è una "variabile" o un "parametro" e c'è una differenza? ) Ma sembra che tu possa in qualche modo definire le variabili a livello di gruppo.
DerfK,

Risposte:


74

È possibile aggiungere la seguente sezione al file di inventario:

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

Nota: prima di Ansible 2.0 ansible_userera ansible_ssh_user.


2
Sopra Ansible 2.0, dovrebbe essere: [all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
zx1986

2
@ zx1986 dove l'hai letto?
030


Si noti che la porta 22 è l'impostazione predefinita per ansible_port, quindi non è necessario specificarla esplicitamente se non diversamente. Interessato se qualcuno sa come applicare le variabili a più di un gruppo alla volta (ma non "tutto"), la separazione delle virgole non sembra funzionare.
William Turrell,

1
@WilliamTurrell un po 'in ritardo ma .. puoi creare un gruppo di gruppi (con il modificatore: children) e successivamente impostare le variabili (con il modificatore: vars).
Lasse Halberg Haarbye,

23

Variabili di gruppo

Puoi impostare le variabili che si applicano a tutti gli host utilizzando il layout del playbook specificato nel documento Best Practices di Ansible e creando un group_vars/allfile in cui li definisci .

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

[modifica] Sono confuso però per quello che stai cercando di fare. Non è necessario specificare l'utente Ansible o la password nell'inventario. Se stai usando Vagrant sicuramente non lo fai, e se stai chiamando Ansible dalla riga di comando puoi specificare l'utente con --user=vagrante fargli chiedere la password con --ask-pass.


1
Devo solo organizzare meglio la mia infrastruttura. Se sempre userò vagrant: vagrant voglio metterlo in una posizione in cui Ansible si carica di default, ma non so dove. Ogni connessione da eseguire deve usarla.
Robert,

Il file deve essere nominato group_vars/all/main.ymlo semplicemente group_vars/all?
realtebo,

questo ha funzionato per me dopo l'installazione sshpass-"you must install the sshpass program"
user9869932

1
@realtebo Il file deve essere nominato group_vars/all.
xloto,

1
-k per ask pass non è molto divertente per "all" quando ogni host ha una password diversa. Sì, è necessario sshpass e sì, probabilmente è necessario eseguire il seeding known_hosts se non ci si è mai connessi prima ~ \ .ssh \ config è la strada da percorrere.
mckenzm,

5

Penso che sia meglio usare l'installazione della chiave ssh su tutti i server attraverso il pull. Dovresti eseguire ssh-copy-id solo per nodo e installare la tua chiave ssh ovunque per consentire a ansible di accedere usando la tua chiave ssh. Sarà più sicuro non salvare le password nel playbook / inventario.

Per fare ciò dovresti generare la tua coppia di chiavi ssh ed eseguire ssh-copy-id per tutti i server in seguito.


1
Se qualcuno può rubare la password dal tuo file di configurazione, probabilmente sarà anche in grado di usare le tue chiavi ssh. E questo non ha nulla a che fare con la risposta alla domanda dei PO. Questa domanda non chiedeva opinioni su alternative.
Muh Fugen,

@MuhFugen> Come posso configurarli in un unico posto? Esiste un file con questi parametri? Questa è una frase esatta che lascia la porta all'opinione e la risposta fornisce una comprensione della giusta direzione. Rubare la configurazione (che potrebbe vivere nel repository git da qualche parte) non equivale a rubare la chiave privata.
Podarok,

4

Aggiungi sotto agli host di inventario.

Per Ansible <2.0:

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

Per 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

Il link menziona ansible_ssh_passno ansible_pass.
Matthias Weiler,

2

Disclaimer: l'ho provato solo su OSX. Sulla base dei vari documenti, mi aspetto che funzioni su altre piattaforme.

"directory del progetto" si riferisce alla directory di base per il progetto Vagrant - la directory che contiene Vagrantfile.

File di inventario Ansible generato automaticamente da Vagrant:

Vagrant crea un file di inventario con le variabili di connessione Ansible predefinite. Cercalo dentro <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

Questo file verrà rigenerato da Vagrant in base alle necessità, quindi le modifiche manuali verranno sovrascritte. Tuttavia, secondo i documenti di Vagrant, è possibile specificare più macchine, raggruppare var, ecc. VagrantfileE verranno aggiunti a questo file di inventario.

Configurare Ansible per impostazione predefinita a questo file di inventario:

Per rendere questo file il valore predefinito utilizzato dal ansiblecomando quando ci si trova nella directory del progetto (sull'host), aggiungere un ansible.cfgfile nella directory del progetto con questi contenuti, modificando il percorso secondo necessità:

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

Per confermare che questo file di inventario viene utilizzato, cercalo come predefinito riportato da ansible:

(dall'interno della directory del progetto)

$ 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

Per confermare i tuoi host:

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

Utilizzo di Ansible con questi host:

Dall'interno della directory del progetto, dovresti essere in grado di utilizzare ansiblenormalmente con gli host in cui hai definito Vagrantfile.

Per esempio:

ansible slave -a 'hostname'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.