새 사용자 및 SSH 키 인증을 설정합니다. Ubuntu 18.04에서 Ansible 사용
이 페이지에서
- 전제 조건
- 무엇을 할 것인가?\n
- 1단계 - Ansible 제어 시스템 설정
- 2단계 - 사용자 및 SSH 키 정의
- 3단계 - 새 인벤토리 만들기
- 4단계 - Ansible 플레이북 만들기\n
- 5단계 - 플레이북 실행\n
- 6단계 - 테스트
- 참조
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
우리는 무엇을 할 것입니까?
- Ansible 제어 시스템 설정
- 사용자 및 SSH 키 정의
- 인벤토리 파일 만들기
- Ansible 플레이북 만들기\n
- 플레이북을 사용하여 서버 배포\n
- 테스트
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