Sto eseguendo il playbook Ansible e funziona perfettamente su una macchina.prompt ssh ansible problema known_hosts
In una nuova macchina quando provo per la prima volta, viene visualizzato il seguente errore.
17:04:34 PLAY [appservers] *************************************************************
17:04:34
17:04:34 GATHERING FACTS ***************************************************************
17:04:34 fatal: [server02.cit.product-ref.dev] => {'msg': "FAILED: (22, 'Invalid argument')", 'failed': True}
17:04:34 fatal: [server01.cit.product-ref.dev] => {'msg': "FAILED: (22, 'Invalid argument')", 'failed': True}
17:04:34
17:04:34 TASK: [common | remove old ansible-tmp-*] *************************************
17:04:34 FATAL: no hosts matched or all hosts have already failed -- aborting
17:04:34
17:04:34
17:04:34 PLAY RECAP ********************************************************************
17:04:34 to retry, use: --limit @/var/lib/jenkins/site.retry
17:04:34
17:04:34 server01.cit.product-ref.dev : ok=0 changed=0 unreachable=1 failed=0
17:04:34 server02.cit.product-ref.dev : ok=0 changed=0 unreachable=1 failed=0
17:04:34
17:04:34 Build step 'Execute shell' marked build as failure
17:04:34 Finished: FAILURE
Questo errore può essere risolto, se prima di andare alla macchina sorgente (da cui sto correndo il playbook ansible) e ssh manualmente al computer di destinazione (come l'utente data) e immettere "sì" per la voce del file known_hosts.
Ora, se eseguo la seconda volta lo stesso ansible playbook, funziona senza errori.
Pertanto, come posso sopprimere il prompt che cosa fornisce SSH durante la prima volta che si effettua la voce ssh known_hosts per un dato utente (cartella ~/.ssh, file known_hosts)?
Ho trovato che posso farlo se uso le seguenti voci di configurazione nel file ~/.ssh/config.
~/.ssh/config
# For vapp virtual machines
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
User kobaloki
LogLevel ERROR
cioè se metto il codice di cui sopra nel file ~/.ssh/config da parte dell'utente di un computer remoto e provare Ansible playbook per la prima volta, ho vinto' t viene richiesto di inserire "sì" e il playbook verrà eseguito correttamente (senza richiedere all'utente di creare manualmente una voce di file known_hosts dalla macchina di origine al computer di destinazione/remoto).
Le mie domande: 1. Quali problemi di sicurezza devo prendere cura se vado ~/.ssh/config modo 2. Come posso passare le impostazioni (quello che c'è nel file di configurazione) come parametri/opzioni per ansible a linea di comando in modo che venga eseguito prima volta su una nuova macchina (senza chiedere conferma/a seconda della voce di file known_hosts sul computer di origine per la macchina di destinazione
Funziona. Se non voglio cambiare ~/.ansible.cfg, posso ancora usare quella variabile di esportazione. L'unica cosa che guardo a questo punto è: se il mio file di inventario ha un host come xxxx cioè IP, ansible è in grado di eseguire correttamente il playbook sul computer di origine (dove è disponibile l'ansible) MA, se uso hostname.company. fqdn.or.short.hostname.com nel file di inventario, quindi ansible non è in grado di risolvere il nome host sul computer di origine. Se aggiungo la mia voce del server DNS (nameserver 10.11.12.133) a /etc/resolv.conf, allora funziona bene. Qualche idea ? Come posso passare la voce del server DNS ad ansible a linea di comando? –
Si può provare anche questo: ansible-playbook -e 'host_key_checking = False' yourplaybook.yml –
Ansible usa la risoluzione DNS del tuo host, come hai notato. Se il nome host si risolve in un IP funzionerà, ma Ansible non ha (e non dovrebbe) un altro meccanismo per questo. Un trucco che uso per questo genere di cose è inserire una voce in/etc/hosts se il sistema non è nel DNS. –