본문 바로가기

Project

Ansible 사용자 계정 생성하기

사용자 계정 생성하기

다음 요구 사항에 맞춰 사용자 계정을 생성하는 작업을 수행해 보았습니다.

 

 

  • 직무 설명이 developer인 사용자는:
    • devtest 호스트 그룹의 관리 대상 노드에서 생성됩니다.
    • pw_developer 변수에서 비밀번호를 할당받습니다.
    • 비밀번호 최대 유효 기간은 30일입니다.
    • 보조 그룹 devops의 멤버입니다.
  • 직무 설명이 manager인 사용자는:
    • prod 호스트 그룹의 관리 대상 노드에서 생성됩니다.
    • pw_manager 변수에서 비밀번호를 할당받습니다.
    • 비밀번호 최대 유효 기간은 30일입니다.
    • 보조 그룹 opsmgr의 멤버입니다.

 

  • 비밀번호는 SHA512 해시 형식으로 저장됩니다.

1. 사용자 목록 다운로드

먼저, 사용자 목록 파일을 다운로드합니다.

# 사용자 목록 파일 다운로드
wget http://classroom/materials/user_list.yml -O /home/greg/ansible/user_list.yml

# 파일 내용 확인
cat /home/greg/ansible/user_list.yml

2. 플레이북 작성

/home/greg/ansible/users.yml 파일을 생성하여 사용자 계정을 생성하는 플레이북을 작성합니다.

# 플레이북 파일 생성
vim /home/greg/ansible/users.yml

 

다음과 같이 플레이북을 작성합니다.

---
- name: Create Developer Users
  hosts: dev,test
  vars_files:
    - /home/greg/ansible/locker.yml
    - /home/greg/ansible/user_list.yml
  tasks:
    - name: Ensure devops group exists
      group:
        name: devops
        state: present

    - name: Create developer users
      user:
        name: "{{ item.name }}"
        groups: devops
        password: "{{ pw_developer | password_hash('sha512') }}"
        password_expire_max: "{{ item.password_expire_max }}"
      loop: "{{ users }}"
      when: item.job == 'developer'

- name: Create Manager Users
  hosts: prod
  vars_files:
    - /home/greg/ansible/locker.yml
    - /home/greg/ansible/user_list.yml
  tasks:
    - name: Ensure opsmgr group exists
      group:
        name: opsmgr
        state: present

    - name: Create manager users
      user:
        name: "{{ item.name }}"
        groups: opsmgr
        password: "{{ pw_manager | password_hash('sha512') }}"
        password_expire_max: "{{ item.password_expire_max }}"
      loop: "{{ users }}"
      when: item.job == 'manager'

3. 플레이북 실행

작성한 플레이북을 실행하여 사용자 계정을 생성합니다.

# 플레이북 실행
ansible-navigator run /home/greg/ansible/users.yml -m stdout

4. 실행 결과

플레이북 실행 결과는 다음과 같습니다.

PLAY [Create Developer Users] *************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************************************************
ok: [node2]
ok: [node1]

TASK [Ensure devops group exists] ***************************************************************************************************************************************************************************************************************************************************************
ok: [node2]
ok: [node1]

TASK [Create developer users] ****************************************************************************************************************************************************************************************************************************************************************
changed: [node2] => (item={'name': 'bob', 'job': 'developer', 'password_expire_max': 10, 'uid': 3000})
skipping: [node2] => (item={'name': 'sally', 'job': 'manager', 'password_expire_max': 20, 'uid': 3001}) 
changed: [node1] => (item={'name': 'bob', 'job': 'developer', 'password_expire_max': 10, 'uid': 3000})
skipping: [node1] => (item={'name': 'sally', 'job': 'manager', 'password_expire_max': 20, 'uid': 3001}) 
changed: [node2] => (item={'name': 'fred', 'job': 'developer', 'password_expire_max': 30, 'uid': 3002})
changed: [node1] => (item={'name': 'fred', 'job': 'developer', 'password_expire_max': 30, 'uid': 3002})

PLAY [Create Manager Users] *************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************************************************
ok: [node3]
ok: [node4]

TASK [Ensure opsmgr group exists] ***************************************************************************************************************************************************************************************************************************************************************
changed: [node3]
changed: [node4]

TASK [Create manager users] ****************************************************************************************************************************************************************************************************************************************************************
skipping: [node3] => (item={'name': 'bob', 'job': 'developer', 'password_expire_max': 10, 'uid': 3000}) 
skipping: [node4] => (item={'name': 'bob', 'job': 'developer', 'password_expire_max': 10, 'uid': 3000}) 
changed: [node4] => (item={'name': 'sally', 'job': 'manager', 'password_expire_max': 20, 'uid': 3001})
skipping: [node4] => (item={'name': 'fred', 'job': 'developer', 'password_expire_max': 30, 'uid': 3002}) 
changed: [node3] => (item={'name': 'sally', 'job': 'manager', 'password_expire_max': 20, 'uid': 3001})
skipping: [node3] => (item={'name': 'fred', 'job': 'developer', 'password_expire_max': 30, 'uid': 3002}) 

PLAY RECAP **********************************************************************************************************************************************************************************************************************************************************************
node1                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

 

 

5. 검증

플레이북을 실행한 후 검증 결과는 다음과 같습니다.

# 검증
ansible dev,test -m shell -a 'id bob; id fred'
ansible prod -m shell -a 'id sally'
ssh bob@node1
bob@node1\'s password: Imadev
ssh sally@node3
sally@node3\'s password: Imamgr

 

 

 

 

 

 

 

 

 

 

'Project' 카테고리의 다른 글

Ansible 하드웨어 보고서 생성하기  (0) 2025.02.25
Ansible 파티션 설정  (0) 2025.02.25
Ansible 웹서버 구축  (0) 2025.02.25
Ansible 설치 및 구성  (0) 2025.02.25