*해당글은 Ansible이 설치되어 있다고 가정합니다.CentOS7 기준으로 작성되었습니다.

 

설치 전 사전 준비 사항

apache를 설치할 서버에 대해서, public key file / password 등을 이용하여 ssh로 로그인할 수 있어야 합니다.

 

SSH 연결 확인

먼저 접속할 서버에 SSH로 접근할 수 있는지 확인해 본다.

[ Ansible 서버 ] 

# SSH 접속할 서버의 IP 주소

만약 접속이 불가하다면 3가지를 의심해볼 수 있다.

  • 방화벽 SSH(22번 포트) 허용 X
  • 비밀번호가 틀렸거나 키 값이 등록되지 않은 경우
  • 네트워크 문제

필자의 경우 원활한 SSH 접속을 위해 Ansible 서버에서 Public Key값을 생성 후 접속할 서버에 등록해주었다.

[ Ansible 서버 ] 

// 키 생성
# ssh-keygen -t rsa
// Public Key 조회
# cat ~/.ssh/id_rsa.pub
// 복사

[ 접속할 서버 ]

// 키 등록 (복사한 Public key 붙여넣기)
# vi ~/.ssh/authorized_keys

위 과정을 수행하면 앞으로 Ansible 서버에서 SSH로 접속할 때 비밀번호를 입력하지 않아도 된다. 다시 한 번, SSH로 접속 시도를 해 본 후, 접속이 된다면 exit를 입력하여 Ansible 서버로 돌아오자. ansible이 위치한 /etc/ansible 디렉토리로 이동해보자.

크게 2가지 작업을 수행해야 한다.

  • hosts에 접속할 대상 등록
  • roles에 playbook 생성

 

1. 원격으로 접속할 호스트 주소를 인벤토리 파일에 작성합니다.

[webservers]
192.168.150.83
192.168.150.84

 

2. playbook.yaml을 작성합니다.

hosts에는 원격으로 접속할 호스트를 적습니다. 인벤토리 파일 내의 특정 헤더를 적어주면, mapping된 호스트 주소에 대해서 각각 ansible이 동작하게 됩니다.

(ex. ansible_hosts 파일 내 webservers 헤더 기재 → "{remote_user}@192.168.150.83", "{remote_user}@192.168.150.84" 두 호스트에 대해서 tasks 동작)

remote_user에는 접속할 호스트의 username을 각각 적습니다.

tasks는 원격으로 실행할 내용을 적는 란이므로, 아래와 같이 작성합니다. 

[ playbook.yaml ]

- hosts: webservers
  remote_user: root
  tasks:
  - name: install apache at the latest version
    yum: pkg=httpd state=latest
  - name: start apache
    service: name=httpd state=started enabled=yes

첫번째 task는 "$yum install httpd latest"와 동일하여 Apache2를 설치합니다.

두번째 task는 "$sudo service httpd start"와 동일하여 Apache2를 실행합니다.

 

3. ansible-playbook 명령문을 실행합니다.

-i option으로써 host 정보가 담긴 inventory file(ex. ansible_hosts) 이름을 인자로 추가하고 tasks, username이 기재된 yaml(ex. playbook.yml) 파일을 또한 추가하여 아래와 같이 실행합니다.

[ ansible 명령문 ]

ansible-playbook -i ansible_hosts playbook.yml

아래와 같은 결과가 출력되면 성공입니다.

 

위와 같이 permission error가 발생하는 경우에는 환경에 따라서 아래 중 한가지 방식으로 해결합니다.

(1) 패스워드 프롬프트

→ -k option을 이용하여 prompt 시 패스워드를 입력합니다.(비밀번호가 1종류인 경우)

[ -k option 이용 예시 ]

ansible-playbook -i ansible_hosts playbook.yml -k
SSH password: {input password..}

 

(2) public key를 이용하여 패스워드 입력을 우회

→ 원격 호스트의 {home of user}/.ssh/authorized_keys 파일에

→ Ansible 실행 서버의 {home of user}/.ssh/id_rsa.pub의 내용을 덧붙이면 

원격 호스트에 대해서 패스워드 입력 없이 ssh 진입이 가능해집니다.

 

(3) private key 이용 (VM의 초기설정으로 인하여 private key 없이는 로그인할 수 없는 경우)

→ --key-file {key file name} 옵션을 추가합니다.

[ private key 이용 예시 ]

ansible-playbook -i ansible_hosts playbook.yml --key-file privateAccessKey.pem