Mes nouvelles instances de serveur sont configurées pour se connecter sur root via ssh avec mot de passe. Je veux que mon playbook Ansible le reconfigure pour utiliser des clés à la place et désactiver la connexion root avec mot de passe lors de la première exécution, j'ai donc besoin de quelque chose comme ceci:
- essayez de vous connecter avec la clé
si vous ne pouvez pas vous connecter avec la clé:
- connexion avec mot de passe
- ajouter la clé aux clés autorisées
- désactiver la connexion root avec mot de passe
- éventuellement reconnecter à l'aide de la clé
faire d'autres tâches
Comment puis-je y parvenir?
EDIT : Pour être clair, je ne demande pas comment ajouter une clé ou désactiver root, c'est juste pour le contexte. Je demande comment revenir au mot de passe s'il ne peut pas s'authentifier avec la clé. Avec --ask-pass
ou ansible_ssh_pass
défini, Ansible n'essaiera même pas d'utiliser l'authentification par clé publique
ssh
authentication
ansible
petr0
la source
la source
Réponses:
Vous pouvez essayer l'
PreferredAuthentications
option en la réglant surpublickey,password
. La valeur par défaut les inclut dans cet ordre, ainsi que d'autres options, donc ansible le définit probablement. L'ajout via-o
ou le clientssh_config
peut empêcher cela.Vous pourrez peut-être utiliser un script wrapper. Par exemple, avec ceci dans
key_or_password.sh
et unpass.sh
qui donne le mot de passe, l'exécutionbash key_or_password.sh root@host
essaiera un publickey suivi d'une connexion par mot de passe non interactive.Le journal indique quelle méthode a réussi, par exemple
la source
Voici ce que je fais si
ansible_user
est différent pour la `` première exécution '' du playbook (par exemple, si vous n'avez qu'unroot
utilisateur et que vous allez configurer un nouvel utilisateur avec une clé SSH):ansible_pass
comme vous le feriez si vous utilisiez des connexions par mot de passe (n'oubliez pas d'utiliser Vault), il devrait s'agir du mot de passe de l'utilisateur que vous utilisez pour la première exécution du playbook.ansible_user
le nom d'utilisateur de l'utilisateur que vous souhaitez utiliser après la première exécution lorsque les utilisateurs sont correctement configurés sur le serveur.ansible_user_first_run
l'utilisateur que vous allez utiliser pour la «première exécution» du playbook, par exempleroot
.ignore_errors
etchanged_when: False
ansible_user
à jour la valeur deansible_user_first_run
Voici le code:
Remarque: Cela vaut la peine d'être configuré
transport = ssh
car paramiko peut échouer de manière inattendue à se connecter au serveur dans certaines configurations (par exemple, lorsque le serveur est configuré pour ne pas accepter les mots de passe, et que vous essayez d'abord avec une clé puis un mot de passe ... bizarre!) Le transport ssh est également plus rapide, donc ça vaut le coup quand même.Remarque supplémentaire: Si vous utilisez cette méthode, vous devez spécifier
gather_facts: false
dans votre fichier de définition de playbook afin que les tâches de configuration / collecte de faits ne soient pas exécutées automatiquement avant de passer à l'étape de test des mots de passe. Si vous avez besoin de l'un des faits ansibles, vous devrez appeler explicitementsetup
votre rôle avant d'accéder à l'une des données normalement disponibles dans des endroits tels queansible_devices
, etc. Une bonne façon de le faire est d'appelersetup
avec unewhen
clause qui vérifie si le fait que vous utilisez est vide ou non avant de l'appeler dans votre rôle.la source
gather_facts: no
pour cesser ansible d'essayer de vous connecter lors du lancement du playbook :)Vous pouvez utiliser
--ask-pass
lors de l'exécution de ansible-playbook.Pour d'autres tâches que vous avez demandées, il est possible de le faire par divers moyens, par exemple, le module de copie.
La désactivation de la connexion root peut également être effectuée, par exemple. en modélisant
sshd_conf
ou en insérant une ligne dans le fichier conf.la source