J'essaie d'écrire un playbook Ansible pour démarrer mes serveurs. Par défaut sur Linode, je ne peux me connecter qu'en tant que root avec un mot de passe, donc mon playbook se connecte en tant que root, crée un utilisateur non root avec une clé SSH et désactive le root et le mot de passe SSH.
C'est un problème car je ne peux plus exécuter ce playbook car la connexion root est désactivée! Je voudrais que le playbook soit idempotent et ne doive pas ajouter et supprimer des hôtes après les avoir initialisés.
Réponses:
J'aime le faire de cette façon:
J'essaie de me connecter à l'hôte distant avec mon utilisateur ansible. Si cela est impossible (lors de la première exécution), je me connecte en tant que root et crée l'utilisateur ansible avec son
authorized_keys
fichier et sessudo
droits.Lors des exécutions suivantes, la connexion en tant qu'utilisateur ansible fonctionne, de sorte que le bloc de tâches peut être ignoré.
Une fois l'hôte distant démarré, je peux continuer avec l'utilisateur ansible et
become
:la source
remote_user
dans votre playbook après cette première exécution? Ce n'est pas idempotent. J'espère que je manque quelque chose.bootstrap.yml
etsite.yml
, oùsite.yml
inclutbootstrap.yml
avant toute autre chose). Si la première tâchebootstrap.yml
échoue, toutes les autres tâches de ce jeu sont ignorées etsite.yml
prennent le relais."skip_reason": "Conditional result was False"
. Exécution de la pièce avec des-vvv
spectacles que l'appel ssh revient"msg": "non-zero return code", "rc": 255,
when
condition:when: not "OK" in check_ansible_user.stdout
Je ferais ce qui suit:
sshd_config
(j'aurais tendance à vous recommander de gérer l'intégralité du fichier, en utilisant untemplate
, mais cela dépend de vous), et désactivez les connexions rootPour le premier rôle (celui de base), j'ai tendance à utiliser quelque chose comme:
Pour la configuration SSH, j'utiliserais:
Les dépendances de rôle d'Ansible sont documentées ici .
Pour cela, vous pouvez également utiliser la commande dans votre livre de lecture.
J'ai quelques trucs ansibles sur github (dont ce qui précède est pris), si vous voulez le voir dans le contexte
la source
Si vous créez vos serveurs sur Linode avec le module linode vous pouvez enregistrer la
return value
de lalinode
tâche et inclure les tâches d'amorçage avec une condition de vérification du outout de la tâche linode. Cela devrait être idempotent. Essayez quelque chose comme ceci:bootstrap.yml
contiendrait alors toutes les tâches nécessaires pour désactiver la connexion root ssh, etc.la source
Peut-être vous pouvez simplement modifier le
ansible_ssh_user
dans l' inventaire une fois que vous avez bootstrapped l'hôte?la source