Configurer les informations d'identification SSH par environnement

10

J'essaie de comprendre comment configurer les informations d'identification SSH séparément pour un environnement de production et de transfert avec Ansible. Je comprends que vous pouvez configurer séparément les adresses IP et les noms d'hôte du serveur à l'aide de différents fichiers d'inventaire en passant l' argument -ior --inventory-fileà la ansible-playbookcommande. Cependant, je ne vois pas une telle option pour ansible.cfg. Actuellement, les informations d'identification vivent /etc/ansible/ansible.cfgcomme:

[defaults]
private_key_file=/home/caleb/.ssh/staging_key.pem
remote_user=ubuntu
sudo_user=root
gathering=explicit

Comment puis-je configurer plusieurs informations d'identification SSH, une pour la production et une pour le transfert?

user369450
la source
quels changements entre vos environnements? Juste le fichier de clé, ou aussi le remote_user / sudo_user?
tedder42
@ tedder42 La clé privée SSH et remote_user.
user369450
Pourquoi ne couvrez-vous pas cela dans votre .ssh / config?
udondan
@udondan Existe-t-il un moyen de spécifier une seule clé une fois pour plusieurs hôtes .ssh/config?
user369450
Oui, tu peux faire ça. Vous pouvez créer plusieurs groupes avec des noms d'hôtes ou des modèles explicites. Permettez-moi de poster un exemple dans une réponse.
udondan

Réponses:

16

Il semble que ma première réponse n'était pas tout à fait correcte. Bien sûr, il est possible de le résoudre de la manière .ssh/configdécrite ci-dessous, mais cela semble également possible avec les paramètres d'inventaire comportemental d' Ansibles .

Vous devez (selon les documents) être en mesure de définir le fichier de clés et l'utilisateur dans votre inventaire, soit par hôte ou par groupe.

Définition par groupe:

[some_hosts]
host1.foo
host2.foo

[some_hosts:vars]
ansible_ssh_user=ubuntu
ansible_ssh_private_key_file=/home/caleb/.ssh/staging_key.pem

Définition par hôte:

[some_hosts]
host1.foo     ansible_ssh_user=ubuntu          ansible_ssh_private_key_file=/home/caleb/.ssh/staging_key.pem
host2.foo     ansible_ssh_user=another_user    ansible_ssh_private_key_file=/home/caleb/.ssh/production_key.pem

Mais vous pouvez définir plusieurs groupes d'hôtes déjà dans votre .ssh/configet chaque groupe peut avoir ses propres paramètres concernant la clé et l'utilisateur.

Voici un petit exemple

#Example with a wildcard
Host *.foo.com
  user ubuntu
  IdentityFile /home/caleb/.ssh/staging_key.pem

#Example with multiple hostnames
Host hostname.one hostname.two hostname.three
  user other_user
  IdentityFile /home/caleb/.ssh/production_key.pem

Vous pouvez également définir une valeur par défaut et la remplacer plus tard avec des paramètres plus détaillés.

Host *
  user defaut_username

Host somehost
  user special_username
udondan
la source