웹사이트 검색

새 사용자 및 SSH 키 인증을 설정합니다. Ubuntu 18.04에서 Ansible 사용


이 페이지에서

  1. 전제 조건
  2. 무엇을 할 것인가?\n
  3. 1단계 - Ansible 제어 시스템 설정
  4. 2단계 - 사용자 및 SSH 키 정의
  5. 3단계 - 새 인벤토리 만들기
  6. 4단계 - Ansible 플레이북 만들기\n
  7. 5단계 - 플레이북 실행\n
  8. 6단계 - 테스트
  9. 참조

Ansible은 소프트웨어 애플리케이션 배포, 클라우드 프로비저닝 및 구성 관리를 자동화하는 간단한 자동화 도구입니다. Control Machines라는 단일 위치에서 많은 수의 서버 노드를 관리하고 제어하는 데 도움이 되는 서버 오케스트레이션 도구입니다. Ansible은 2012년 Michael DeHaan에 의해 만들어졌으며 Python 및 Powershell로 작성되었습니다.

이 자습서에서는 자동화 도구 Ansible을 사용하여 새 사용자를 배포하고 SSH 키 기반 인증을 활성화하는 방법을 알아봅니다. 또한 Ansible Control Machine을 구성하는 방법과 간단한 ansible 플레이북을 작성하는 방법을 배웁니다.

전제 조건

  • 2개 이상의 Ubuntu 18.04 서버
    • 10.0.15.10 제어 기계
    • 10.0.15.21 ansi01
    • 10.0.15.22 ansi02

    우리는 무엇을 할 것입니까?

    1. Ansible 제어 시스템 설정
    2. 사용자 및 SSH 키 정의
    3. 인벤토리 파일 만들기
    4. Ansible 플레이북 만들기\n
    5. 플레이북을 사용하여 서버 배포\n
    6. 테스트

    1단계 - Ansible 제어 시스템 설정

    이 튜토리얼에서는 Ubuntu 16.04 서버를 Ansible Machine Control 및 ansible 호스트로 사용합니다. 우리가 해야 할 첫 번째 단계는 제어 기계를 설정하는 것입니다.

    다음 명령을 실행하여 ansible 제어 시스템에 python 및 ansible을 설치합니다.

    sudo apt install python ansible -y

    설치가 완료되면 새 시스템 사용자를 추가합니다.

    Ansible을 사용하여 서버 프로비저닝을 수행하기 위해 provision이라는 새 사용자를 추가합니다.

    새 사용자 프로비저닝을 추가하고 사용자에게 비밀번호를 제공하십시오.

    useradd -m -s /bin/bash provision
    passwd provision

    이제 아래 명령을 사용하여 /etc/sudoers.d/ 아래에 새 구성 파일을 생성하여 암호 없이 sudo에 대한 프로비저닝 사용자를 추가합니다.

    echo  -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision

    새로운 사용자가 생성되어 이제 비밀번호 없이 sudo를 사용할 수 있습니다.

    2단계 - 사용자 및 SSH 키 정의

    이 단계에서는 ansible 호스트에 대한 사용자를 정의합니다. 이 사용자는 ansible에 의해 자동으로 생성되므로 사용자 이름, 암호 및 ssh 공개 키만 정의하면 됩니다.

    각 서버(ansi01 및 ansi02)에 대해 암호가 secret01인 provision이라는 새 사용자를 만듭니다. 그리고 mkpasswd 명령을 사용하여 secret01 암호를 암호화해야 합니다.

    아래 명령을 사용하여 secret01 암호를 암호화합니다.

    mkpasswd --method=SHA-512
    TYPE THE PASSWORD 'secret01'

    메모:

    whois 패키지가 시스템에 설치되어 있는지 확인하거나 다음 명령을 사용하여 설치할 수 있습니다.

    sudo apt install whois -y

    그러면 SHA-512로 암호화된 비밀번호를 얻게 됩니다.

    다음으로 새 ssh 키를 생성합니다.

    프로비저닝 사용자로 로그인하고 ssh-keygen 명령을 사용하여 ssh 키를 생성합니다.

    su - provision
    ssh-keygen -t rsa

    이제 사용자와 암호가 정의되었고 ssh 키가 생성되었습니다(.ssh 디렉토리에 있음).

    3단계 - 새 재고 생성

    이 단계에서는 모든 서버 호스트에 대한 인벤토리 파일을 정의합니다.

    프로비저닝 사용자로 로그인하고 프로젝트의 새 디렉터리를 만듭니다.

    su - provision
    mkdir -p ansible01/

    ansible01 디렉토리로 이동하고 vim을 사용하여 인벤토리 파일 inventory.ini를 새로 만듭니다.

    cd ansible01/
    vim inventory.ini

    다음 구성을 거기에 붙여넣으십시오.

    [webserver]
    ansi01 ansible_host=10.0.15.21
    ansi02 ansible_host=10.0.15.22

    저장 및 종료.

    이제 새로운 ansible 구성 파일 ansible.cfg를 생성합니다.

    vim ansible.cfg

    다음 구성을 거기에 붙여넣으십시오.

    [defaults]
    inventory = /home/provision/ansible01/inventory.ini

    저장 및 종료.

    ansible 인벤토리 파일이 생성되었고 우리의 ansible 스크립트는 ansible01 디렉토리 내부의 provision user 아래에 위치할 것입니다.

    4단계 - Ansible 플레이북 생성

    Ansible Playbook은 단일 또는 서버 호스트 그룹에서 실행하기 위해 보내는 지침 세트입니다. 자동화가 작업으로 정의되고 패키지 설치, 파일 편집과 같은 모든 작업이 ansible 모듈에 의해 수행되는 ansible-provisioning을 나타냅니다.

    이 단계에서는 새로운 ansible 플레이북을 생성하여 새 사용자를 배포하고 ssh 키를 배포하고 ssh 서비스를 구성합니다.

    새로운 ansible 플레이북을 생성하기 전에 아래와 같이 ssh-keyscan 명령을 사용하여 모든 서버 지문을 스캔합니다.

    ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts
    ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts

    해당 서버 지문은 .ssh/known_hosts 파일에 저장됩니다.

    메모:

    서버 노드가 많은 경우 호스트 목록을 저장한 다음 아래와 같이 bash 스크립트를 사용하여 ssh 키 지문을 수동으로 스캔할 수 있습니다.

    for i in $(cat list-hosts.txt)
    do
    ssh-keyscan $i >> ~/.ssh/known_hosts
    done

    다음으로 vim을 사용하여 deploy-ssh.yml이라는 ansible 플레이북을 생성합니다.

    vim deploy-ssh.yml

    거기에 ansible 플레이북을 따라 붙여넣습니다.

    ---
    - hosts: all
      vars:
        - provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'
      gather_facts: no
      remote_user: root

      tasks:

      - name: Add a new user named provision
        user:
             name=provision
             password={{ provision_password }}

      - name: Add provision user to the sudoers
        copy:
             dest: "/etc/sudoers.d/provision"
             content: "provision  ALL=(ALL)  NOPASSWD: ALL"

      - name: Deploy SSH Key
        authorized_key: user=provision
                        key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"
                        state=present

      - name: Disable Password Authentication
        lineinfile:
              dest=/etc/ssh/sshd_config
              regexp='^PasswordAuthentication'
              line="PasswordAuthentication no"
              state=present
              backup=yes
        notify:
          - restart ssh

      - name: Disable Root Login
        lineinfile:
              dest=/etc/ssh/sshd_config
              regexp='^PermitRootLogin'
              line="PermitRootLogin no"
              state=present
              backup=yes
        notify:
          - restart ssh

      handlers:
      - name: restart ssh
        service:
          name=sshd
          state=restarted

    저장 및 종료.

    플레이북 스크립트에서:

    • inventory.ini 파일에 정의된 모든 서버에 적용할 deploy-ssh.yml 플레이북 스크립트를 생성합니다.\n
    • 새 사용자의 암호화된 암호를 포함하는 제공 가능한 변수 provision_password를 생성합니다.\n
    • Ansible 팩트를 아니오로 설정합니다.\n
    • 루트 사용자를 원격 사용자로 정의하여 작업 자동화를 수행합니다.\n
    • 새 사용자를 추가하고 사용자를 sudoers에 추가하고 ssh 키를 업로드하기 위한 새 작업을 만듭니다.\n
    • ssh 서비스 구성, 루트 로그인 비활성화 및 암호 인증 비활성화를 위한 새 작업을 생성합니다. ssh를 구성하는 작업은 다시 시작 ssh 핸들러를 트리거합니다.\n
    • ssh 서비스를 다시 시작하기 위한 핸들러를 생성합니다.\n

    5단계 - 플레이북 실행

    프로비저닝 사용자로 로그인하고 ansible01 디렉토리로 이동합니다.

    su - provision
    cd ansible01/

    이제 아래와 같이 명령을 사용하여 deploy-ssh.yml 플레이북을 실행합니다.

    ansible-playbook deploy-ssh.yml --ask-pass

    루트 비밀번호를 입력하면 아래와 같은 결과를 얻을 수 있습니다.

    새 사용자 및 ssh 키 배포를 위한 모든 작업이 성공적으로 완료되었습니다.

    6단계 - 테스트

    ansible 명령을 사용하여 테스트합니다.

    ansible webserver -m ping
    ansible webserver -m shell -a id

    이제 아래와 같이 녹색 메시지가 나타납니다.

    이제 우리는 Ansible을 사용하여 이러한 ansi01 및 ansi02 서버를 관리할 수 있으며 프로비저닝 사용자는 Ansible의 기본 사용자가 됩니다.

    서버에 대한 연결 테스트

    ssh 10.0.15.21
    ssh 10.0.15.22

    그리고 기본 키 .ssh/id_rsa 파일을 사용하고 사용자 프로비저닝을 사용하여 각 서버에 연결됩니다.

    ansible을 사용하여 새 사용자 및 ssh-key 배포가 성공적으로 완료되었습니다.

    참조

    • http://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html