[LINUX] Créez plusieurs utilisateurs avec des numéros de série à la fois dans Ansible Playbook: Partie 2

introduction

J'ai créé une version clé SSH du Playbook Ansible publiée dans cet article.

Cas présumé

Créez un grand nombre d'utilisateurs de numéros de série, par exemple pour les développeurs. Cependant, je souhaite effectuer une authentification par clé au lieu d'une authentification par mot de passe.

Playbook

Le début est presque le même que celui de l'article précédent. La variable de mot de passe initiale est inutile et a été supprimée.

usercreate_withkey.yml


---
- name: Create many user
  hosts: localhost
  vars:
    user_num_data: "{% for n in range(10) %}{{n+1}},{% endfor %}"
    user_num: "{{ user_num_data.split(',') }}"
    pre_id: 50
    pre_name: devuser
    common_group: devgroup

  tasks:
    - name: Common group is created
      group:
        name: '{{ common_group }}'
        gid: '{{ pre_id }}00'
        state: present

    - name: Groups are created
      group:
        name: '{{ pre_name }}{{ item.zfill(2) }}'
        gid: '{{ pre_id }}{{ item.zfill(2) }}'
        state: present
      with_items:
        - '{{ user_num[:-1] }}'

Dans la création de l'utilisateur, modifiez-le pour spécifier generate_ssh_key: true et ssh_key_bits: 4096.

usercreate_withkey.yml


    - name: Users are created
      user:
        name: '{{ pre_name }}{{ item.zfill(2) }}'
        group: '{{ pre_name }}{{ item.zfill(2) }}'
        groups: '{{ pre_name }}{{ item.zfill(2) }}, {{ common_group }}'
        uid: '{{ pre_id }}{{ item.zfill(2) }}'
        state: present
        generate_ssh_key: true
        ssh_key_bits: 4096
      with_items:
        - '{{ user_num[:-1] }}'
      register: usercreated

Ensuite, créez un ~ / .ssh / allowed_keys pour chaque utilisateur que vous avez créé. Au fait, la raison pour laquelle il est défini sur ʻitem.invocation.module_args.name au lieu de ʻitem.name est d'éviter une erreur en mode Check (exécution à sec).

usercreate_withkey.yml


    - name: authorized_keys files are created
      copy:
        src: '/home/{{ item.invocation.module_args.name }}/.ssh/id_rsa.pub'
        dest: '/home/{{ item.invocation.module_args.name }}/.ssh/authorized_keys'
        owner: '{{ item.invocation.module_args.name }}'
        group: '{{ item.invocation.module_args.name }}'
        mode: '0600'
        remote_src: true
      with_items:
        - '{{ usercreated.results }}'
      when:
        - item.changed
        - item.invocation.module_args.state == "present"
      loop_control:
        label: "{{ item.invocation.module_args.name }}"

Enfin, collectez la clé privée de l'utilisateur créé dans / tmp. (Mis à part l'histoire de la distribution de clés privées en premier lieu ...)

usercreate_withkey.yml


    - name: Secret key files are copied
      copy:
        src: '/home/{{ item.invocation.module_args.name }}/.ssh/id_rsa'
        dest: '/tmp/id_rsa_{{ item.invocation.module_args.name }}'
        owner: root
        group: root
        mode: '0644'
        remote_src: true
      with_items:
        - '{{ usercreated.results }}'
      when: 
        - item.changed
        - item.invocation.module_args.state == "present"
      loop_control:
        label: "{{ item.invocation.module_args.name }}"

Résultat d'exécution

Le résultat de l'exécution d'ansible-playbook est le suivant.

$ ansible-playbook -i inventories/test usercreate_withkey.yml

PLAY [Create many user] ************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [localhost]

TASK [Common group is created] *****************************************************************************************
ok: [localhost]

TASK [Groups are created] **********************************************************************************************
changed: [localhost] => (item=1)
changed: [localhost] => (item=2)
changed: [localhost] => (item=3)
changed: [localhost] => (item=4)
changed: [localhost] => (item=5)
changed: [localhost] => (item=6)
changed: [localhost] => (item=7)
changed: [localhost] => (item=8)
changed: [localhost] => (item=9)
changed: [localhost] => (item=10)

TASK [Users are created] ***********************************************************************************************
changed: [localhost] => (item=1)
changed: [localhost] => (item=2)
changed: [localhost] => (item=3)
changed: [localhost] => (item=4)
changed: [localhost] => (item=5)
changed: [localhost] => (item=6)
changed: [localhost] => (item=7)
changed: [localhost] => (item=8)
changed: [localhost] => (item=9)
changed: [localhost] => (item=10)

TASK [authorized_keys files are created] *******************************************************************************
changed: [localhost] => (item=devuser01)
changed: [localhost] => (item=devuser02)
changed: [localhost] => (item=devuser03)
changed: [localhost] => (item=devuser04)
changed: [localhost] => (item=devuser05)
changed: [localhost] => (item=devuser06)
changed: [localhost] => (item=devuser07)
changed: [localhost] => (item=devuser08)
changed: [localhost] => (item=devuser09)
changed: [localhost] => (item=devuser10)

TASK [Secret key files are copied] *************************************************************************************
changed: [localhost] => (item=devuser01)
changed: [localhost] => (item=devuser02)
changed: [localhost] => (item=devuser03)
changed: [localhost] => (item=devuser04)
changed: [localhost] => (item=devuser05)
changed: [localhost] => (item=devuser06)
changed: [localhost] => (item=devuser07)
changed: [localhost] => (item=devuser08)
changed: [localhost] => (item=devuser09)
changed: [localhost] => (item=devuser10)

PLAY RECAP *************************************************************************************************************
localhost                  : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

La clé privée est collectée dans / tmp et vous pouvez vous connecter avec cette clé privée.

$ ls -l /tmp/id_rsa*
-rw-r--r-- 1 root root 3247 Apr 27 22:42 /tmp/id_rsa_devuser01
-rw-r--r-- 1 root root 3243 Apr 27 22:42 /tmp/id_rsa_devuser02
-rw-r--r-- 1 root root 3243 Apr 27 22:42 /tmp/id_rsa_devuser03
-rw-r--r-- 1 root root 3247 Apr 27 22:42 /tmp/id_rsa_devuser04
-rw-r--r-- 1 root root 3243 Apr 27 22:42 /tmp/id_rsa_devuser05
-rw-r--r-- 1 root root 3247 Apr 27 22:42 /tmp/id_rsa_devuser06
-rw-r--r-- 1 root root 3243 Apr 27 22:42 /tmp/id_rsa_devuser07
-rw-r--r-- 1 root root 3243 Apr 27 22:42 /tmp/id_rsa_devuser08
-rw-r--r-- 1 root root 3243 Apr 27 22:42 /tmp/id_rsa_devuser09
-rw-r--r-- 1 root root 3243 Apr 27 22:42 /tmp/id_rsa_devuser10
$ ssh -i /tmp/id_rsa_devuser01 devuser01@localhost
Last login: Mon Apr 27 22:46:46 2020 from ::1
$

c'est tout. Maintenant, comment distribuer cette clé privée ...

Recommended Posts

Créez plusieurs utilisateurs avec des numéros de série à la fois dans Ansible Playbook: Partie 2
Créez plusieurs utilisateurs avec des numéros de série à la fois avec Ansible Playbook
Mettre à jour plusieurs tables à la fois avec pandas to_sql
Convertissez plusieurs fichiers proto à la fois avec python
Enregistrer plusieurs styles personnalisés dans Word à la fois
Aussi, quand je regarderai en arrière plus, j'écrirai d'une manière facile à comprendre quelle procédure a été implémentée....
[Laravel] Un alias qui crée un fichier de migration pour plusieurs tables à la fois.