연결 방법과 세부 사항
연결 방법과 세부 사항
이 섹션은 인벤토리에 대해 Ansible이 사용하는 연결 방법을 확장하고 보완하는 방법을 보여줘요. 기본 연결 방식에서 시작해 원격 사용자 설정, SSH 키, localhost 실행, 호스트 키 확인 관리까지 이어집니다.
기본적으로 Ansible은 네이티브 OpenSSH를 사용해요. OpenSSH가 ControlPersist(성능 기능)와 Kerberos, 그리고 ~/.ssh/config의 Jump Host 설정 같은 옵션을 지원하기 때문이에요. 만약 컨트롤 머신이 ControlPersist를 지원하지 않는 예전 버전의 OpenSSH라면, Ansible은 'paramiko'라는 파이썬 구현체로 폴백해요.
출처: 문서
본문
원격 사용자 설정
기본적으로 Ansible은 컨트롤 노드에서 쓰는 사용자 이름 그대로 모든 원격 장치에 연결해요. 원격 장치에 그 사용자 이름이 없으면 연결용으로 다른 사용자 이름을 정할 수 있어요. 그냥 일부 작업만 다른 사용자로 하고 싶을 때는 권한 상승(become) 문서를 보세요.
플레이북에서 연결 사용자를 설정하려면 이렇게 해요.
---
- name: update webservers
hosts: webservers
remote_user: admin
tasks:
- name: thing to do first in this playbook
# ...
인벤토리의 호스트 변수로 설정할 수도 있어요.
other1.example.com ansible_connection=ssh ansible_user=myuser
other2.example.com ansible_connection=ssh ansible_user=myotheruser
또는 인벤토리의 그룹 변수로 설정할 수 있어요.
cloud:
hosts:
cloud1: my_backup.cloud.com
cloud2: my_backup2.cloud.com
vars:
ansible_user: admin
SSH 키 설정
기본적으로 Ansible은 원격 머신 연결에 SSH 키를 쓴다고 가정해요. SSH 키 사용을 권장하지만, 필요하면 --ask-pass 옵션으로 비밀번호 인증을 쓸 수도 있어요. 권한 상승(sudo, pbrun 등)용 비밀번호가 필요하면 --ask-become-pass를 사용하세요.
참고로 Ansible은 ssh 연결 플러그인(기본값)을 쓸 때 사용자와 ssh 프로세스 사이에서 SSH 키를 해독하는 비밀번호를 수동으로 받아들일 채널을 노출하지 않아요. 그래서 ssh-agent 사용을 적극 권장해요.
ssh-agent를 설정해 비밀번호 재입력을 피하려면 이렇게 하면 돼요.
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
설정에 따라 pem 파일을 지정하려고 Ansible의 --private-key 명령행 옵션을 쓸 수도 있어요. 프라이빗 키 파일을 추가하는 방법도 있어요.
$ ssh-agent bash
$ ssh-add ~/.ssh/keypair.pem
ssh-agent 없이 프라이빗 키 파일을 추가하는 또 다른 방법은 인벤토리 파일에서 ansible_ssh_private_key_file을 쓰는 거예요.
localhost에 대해 실행하기
서버 이름에 "localhost"나 "127.0.0.1"을 쓰면 컨트롤 노드에서 명령을 실행할 수 있어요.
$ ansible localhost -m ping -e 'ansible_python_interpreter="/usr/bin/env python"'
인벤토리 파일에 이렇게 추가하면 localhost를 명시적으로 지정할 수 있어요.
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"
호스트 키 확인 관리
Ansible은 기본적으로 호스트 키 확인을 켜 둬요. 호스트 키 확인은 서버 스푸핑과 중간자 공격을 막아 주지만, 유지보수가 필요해요. 호스트를 재설치해서 known_hosts의 키가 달라지면 그 키를 고치기 전까지 에러 메시지가 나요. 또 새 호스트가 known_hosts에 없으면 컨트롤 노드가 키 확인을 물어보는데, Ansible을 cron 같은 데서 쓰면 대화형 경험이 생겨요.
이 동작을 끄고 싶다면, 그 의미를 잘 이해하고 나서 /etc/ansible/ansible.cfg 또는 ~/.ansible.cfg를 편집하면 돼요.
[defaults]
host_key_checking = False
대신 ANSIBLE_HOST_KEY_CHECKING 환경 변수로도 설정할 수 있어요.
$ export ANSIBLE_HOST_KEY_CHECKING=False
참고로 paramiko 모드의 호스트 키 확인은 꽤 느려서, 이 기능을 쓸 때는 'ssh'로 전환하는 것도 권장해요.
다른 연결 방법
Ansible은 SSH 외에도 다양한 연결 방법을 쓸 수 있어요. 로컬에서 관리하는 것과 chroot, lxc, jail 컨테이너를 관리하는 것을 포함해 아무 연결 플러그인이나 선택할 수 있어요. 또 'ansible-pull' 모드는 시스템을 뒤집어서, 각 시스템이 중앙 저장소에서 구성 지시문을 가져오도록 예약된 Git 체크아웃으로 '전화를 거는' 방식이에요.
더 알아보기 (Learn more)
- ssh — ssh 클라이언트 바이너리로 연결하기와
remote_user키워드·ansible_user변수 세부 사항 - Controlling how Ansible behaves: precedence rules — Ansible 우선순위 규칙
- How to build your inventory —
ansible_ssh_private_key_file로 프라이빗 키를 넣는 방법을 포함한 인벤토리 구축법 - Understanding privilege escalation: become — 다른 사용자로 작업을 실행하는 권한 상승