J'essaie de recréer des clés d'hôte ssh sur une poignée de serveurs distants via ansible (et ssh-keygen
), mais les fichiers ne semblent pas apparaître. Le playbook fonctionne correctement, mais les fichiers de la télécommande ne sont pas modifiés.
J'ai besoin de recourir au echo -e
piratage, car ces télécommandes fonctionnent sous Ubuntu 14.04 et n'ont pas la version correcte de la version python-pexpect
disponible (selon ansible).
Qu'est-ce que je rate? Mon playbook et ma sortie sont ci-dessous:
playbook
---
- hosts: all
become: true
gather_facts: false
tasks:
- name: Generate /etc/ssh/ RSA host key
command : echo -e 'y\n'|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ DSA host key
command : echo -e 'y\n'|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
- name: Generate /etc/ssh/ ECDSA host key
command : echo -e 'y\n'|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C "" -N ""
register: output
- debug: var=output.stdout_lines
production
$ ansible-playbook ./playbooks/ssh-hostkeys.yml -l myhost.mydom.com,
SUDO password:
PLAY [all] **********************************************************************************************
TASK [Generate /etc/ssh/ RSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ DSA host key] ******************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C -N "
]
}
TASK [Generate /etc/ssh/ ECDSA host key] ****************************************************************
changed: [myhost.mydom.com]
TASK [debug] ********************************************************************************************
ok: [myhost.mydom.com] => {
"output.stdout_lines": [
"y",
"|ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C -N "
]
}
PLAY RECAP **********************************************************************************************
myhost.mydom.com : ok=6 changed=3 unreachable=0 failed=0
file: state:absent ...
approche sur sip-keygen. Bien qu'il n'y ait probablement pas beaucoup de différence.absent
a quelques jours. En effet, cela supprimera le fichier avant de recréer la clé. C'est une approche beaucoup plus claire. Merci.Le
command
module ansible ne transmet pas de commandes via un shell . Cela signifie que vous ne pouvez pas utiliser d'opérateurs shell tels que le tuyau, et c'est pourquoi vous voyez le symbole du tuyau dans la sortie. En ce qui concerne ansible, il a exécuté la commandeecho
avec tout le reste de la ligne comme argumentsecho
.Si vous avez besoin de la ligne de commande traitée par un shell, utilisez
shell
plutôt quecommand
.Et, il devrait y avoir un meilleur moyen de régénérer les clés d'hôte ssh, mais je n'en trouve pas pour le moment ...
la source
echo ...
bit n'a pas fonctionné après une deuxième exécution (je testais dans/tmp/
lequel les clés n'existaient pas la première fois). J'ai eu recours à la suppression des clés d'hôte d'abord, comme vous le mentionnez, et à la génération de nouvelles. En ce qui concerne la régénération automatique des clés, cela dépend de votre distribution, n'est-ce pas? Toutes les distributions Linux n'utilisent pas systemd.Utilisez le module spécial pour cette tâche:
la source
désolé, mais je ne pouvais pas utiliser "crée" dans une tâche. j'ai obtenu l'erreur suivante:
par conséquent, j'utilise les tâches suivantes:
la source
@Zoredache a la bonne réponse mais elle échoue (notée par @MaxiReglisse) pour les versions récentes d'Ansible. Utilisez plutôt le code suivant:
la source
Une autre option consiste à utiliser le module utilisateur . Le côté positif est que vous aurez une tâche idempotente. Voici un exemple comment générer des clés ssh sur localhost:
la source
Utilisez les modules openssh_keypair et authorized_key pour créer et déployer les clés en même temps sans les enregistrer dans votre hôte ansible.
la source