웹사이트 검색

Ansible 관리 노드를 구성하고 임시 명령을 실행하는 방법 - 3부


이 Ansible 시리즈의 이전 두 기사에서는 Ansible의 핵심 구성 요소와 Ansible 제어 노드 설정에 대해 설명했습니다. 이번 3부에서는 원격 호스트에서 임시 명령을 실행하도록 Ansible 관리 노드를 구성하는 방법을 보여줍니다.

Ansible 관리 노드에 대한 비밀번호 없는 SSH 인증 설정

마지막 주제를 요약하면 Ansible을 사용하여 원격 호스트를 관리하려면 Ansible 제어 노드와 관리 호스트 간에 비밀번호 없는 SSH 인증을 설정해야 합니다. 여기에는 Ansible 제어 노드에서 키 쌍(공개 및 개인 SSH 키 쌍)을 생성하고 공개 키를 모든 원격 호스트에 복사하는 작업이 포함됩니다. 이는 앞으로 중요한 단계가 될 것이며 작업을 훨씬 쉽게 만들어줄 것입니다.

관리 노드에서 권한 상승 구성

일반 사용자로 로그인하면 높은 권한이나 루트 권한이 필요한 관리 노드에서 특정 작업을 수행해야 할 수도 있습니다. 이러한 작업에는 패키지 관리, 새 사용자 및 그룹 추가, 시스템 구성 수정 등이 포함됩니다. 이를 달성하려면 플레이북의 특정 지시문을 호출하여 원격 호스트에서 권한 있는 사용자로 작업을 실행해야 합니다.

~이 되다

Ansible을 사용하면 현재 로그인한 사용자와 다른 관리 노드의 다른 사용자가 '될' 수 있습니다. become:yes 지시어는 사용자의 권한을 높이고 다음과 같은 작업을 수행할 수 있도록 해줍니다. 패키지 설치 및 업데이트, 시스템 재부팅과 같은 루트 권한이 필요합니다.

다음과 같이 Apache 웹 서버를 설치하고 시작하는 플레이북 httpd.yml을 고려해 보세요.

---
- name: install and start Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         yum: name=httpd  state=latest
         become: yes
       - name: check httpd status
         service: name=httpd state=started

become: yes 지시문을 사용하면 원격 호스트에서 루트 사용자로 명령을 실행할 수 있습니다.

be_user

다른 사용자가 되기 위해 사용할 수 있는 또 다른 지시어는 become_user입니다. 이를 통해 로그인 시 로그인한 사용자가 아닌 원격 호스트의 sudo 사용자로 전환할 수 있습니다.

예를 들어, 원격에서 tecmint 사용자로 명령을 실행하려면 표시된 지시어를 사용하십시오.

- name: Run a command as the apache user
  command: somecommand
  become: yes
  become_user: tecmint

될_방법

이 지시문은 일반적으로 sudo로 설정되는 ansible.cfg 파일에 설정된 기본 방법을 재정의합니다.

되어_플래그

이는 플레이 또는 작업 수준에서 사용됩니다. 예를 들어 쉘이 nologin으로 설정되어 있을 때 사용자로 전환해야 하는 경우입니다.

예를 들어,

- name: Run a command as nobody
  command: somecommand
  become: true
  become_method: su
  become_user: nobody
  become_flags: '-s /bin/sh'

권한 상승의 명령줄 옵션

명령을 실행할 때 권한을 높이는 데 사용할 수 있는 몇 가지 명령줄 옵션을 살펴보겠습니다.

  • --ask-become-pass, -K – 연결하려는 원격 시스템의 sudo 사용자 비밀번호를 묻는 메시지가 표시됩니다.
ansible-playbook myplaybook.yml --ask-become-pass

  • --become, -b – 이를 통해 비밀번호를 묻지 않고 루트 사용자로 작업을 실행할 수 있습니다.
ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER – 다른 사용자로 작업을 실행할 수 있습니다.
ansible-playbook myplaybook.yml --become-user=tecmint

Ad-Hoc Ansible 명령을 사용하여 작업 구성 검증

때로는 플레이북을 생성할 필요 없이 Ansible의 원격 호스트나 서버에서 빠르고 간단한 작업을 수행하고 싶을 수도 있습니다. 이 경우 임시 명령을 실행해야 합니다.

임시 명령이란 무엇입니까?

Ansible 임시 명령은 플레이북을 만들 필요 없이 간단하면서도 효율적인 방식으로 간단한 작업을 실행하는 데 도움이 되는 한 줄 명령입니다. 이러한 작업에는 호스트 간 파일 복사, 서버 재부팅, 사용자 추가 및 제거, 단일 패키지 설치 등이 포함됩니다.

이 튜토리얼에서는 Ansible Ad-Hoc 명령의 다양한 애플리케이션을 살펴봅니다. 데모를 위해 아래의 인벤토리 파일을 사용하겠습니다.

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

임시 명령의 기본 사용법

Ansible-Adhoc 명령의 가장 기본적인 사용법은 호스트 또는 호스트 그룹을 ping하는 것입니다.

ansible -m ping all

위 명령에서 -m 매개변수는 모듈 옵션입니다. Ping은 임시 명령이고 두 번째 매개변수 all은 인벤토리 파일의 모든 호스트를 나타냅니다. 명령의 출력은 다음과 같습니다.

특정 호스트 그룹을 ping하려면 'all' 매개변수를 그룹 이름으로 바꾸세요. 아래 예에서는 webservers 그룹 아래 호스트와의 연결을 테스트하고 있습니다.

ansible -m ping webservers

또한 -a 속성을 사용하여 큰따옴표 안에 일반 Linux 명령을 지정할 수 있습니다. 예를 들어 원격 시스템의 시스템 가동 시간을 확인하려면 다음을 실행합니다.

ansible -a "uptime" all

원격 호스트의 디스크 사용량을 확인하려면 실행하십시오.

ansible -a "df -Th" all

Adhoc 명령과 함께 사용할 수 있는 모듈은 수백 개에 달합니다. 설명과 함께 전체 모듈 목록을 보려면 아래 명령을 실행하십시오.

ansible-doc -l

특정 모듈에 대한 자세한 정보를 보려면 명령을 실행하십시오.

ansible-doc module_name

예를 들어 yum 모듈에 대한 자세한 내용을 검색하려면 다음을 실행하세요.

ansible-doc yum

Ansible로 패키지/서비스 관리

yumapt 패키지 관리자를 사용하여 패키지를 설치 및 제거하는 데 Ansible 임시 명령을 사용할 수 있습니다.

인벤토리 파일의 webservers 그룹 아래 CentOS 7 호스트에 Apache 웹 서버를 설치하려면 다음 명령을 실행하세요.

ansible webservers -m yum -a "name=httpd  state=present"

Apache 웹 서버의 설치를 확인하려면 원격 클라이언트에 로그인하여 실행하세요.

rpm -qa | grep httpd

Apache를 제거하려면 간단히 상태를 현재에서 부재로 변경하세요.

ansible webservers -m yum -a "name=httpd  state=absent"

다시 한 번 httpd 실행 제거를 확인합니다.

rpm -qa | grep httpd

관찰된 바와 같이 Apache 웹 서버 패키지가 제거되었습니다.

Ansible을 사용하여 사용자 및 그룹 생성

사용자를 생성할 때 'user' 모듈이 유용합니다. 클라이언트 시스템 Database_server에서 비밀번호가 redhat인 새 사용자 james를 생성하려면 다음 명령을 실행합니다.

ansible database_server -m user -a "name=james password=redhat"

새 사용자 생성을 확인하려면 다음 명령을 실행합니다.

ansible database_servers -a "id james"

사용자를 제거하려면 다음 명령을 실행하십시오.

ansible database_servers -m user -a "name=james state=absent"

권한 승격

Ansible을 일반 사용자로 실행하는 경우 Ansible은 --become 옵션을 사용하여 루트 권한을 획득하고 -k를 사용하여 비밀번호를 묻는 메시지를 표시하는 원격 호스트에서 권한 에스컬레이션을 제공합니다.

예를 들어 권한 있는 옵션 –-become 및 옵션 -K를 사용하여 Ansible 임시 명령 'netstat -pnltu'를 실행하려면 명령을 실행하려면 루트 사용자의 비밀번호가 필요합니다.

ansible webservers -m shell -a 'netstat -pnltu' --become -K

루트가 아닌 다른 사용자가 되려면 --become-user 속성을 사용하세요.

예를 들어, 원격 호스트에서 tecmint 사용자로 'df -Th'를 실행하고 비밀번호를 묻는 메시지를 표시하려면 다음을 실행하세요.

ansible all -m shell -a 'df -Th' --become-user tecmint -K

호스트 시스템에 대한 사실 수집

사실은 시스템에 대한 자세한 정보를 나타냅니다. 여기에는 IP 주소, 시스템 아키텍처, 메모리, CPU에 대한 정보가 포함됩니다.

원격 호스트에 대한 정보를 검색하려면 다음 명령을 실행하십시오.

ansible all -m setup 

파일 전송/파일 복사

Ansible은 copy 모듈을 사용하여 Ansible 컨트롤에서 여러 원격 호스트로 파일을 안전하게 복사합니다.

다음은 복사 작업의 예입니다.

ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"

이 명령은 Ansible Control 노드의 /var/log/secure 파일을 /tmp 대상에 있는 webservers 그룹의 원격 호스트에 복사합니다.

파일 모듈을 사용하여 권한과 파일 소유권을 변경할 수 있습니다.

ansible webservers -m file -a "dest=/tmp/secure mode=600"

또한 다음과 같이 소유자 및 그룹 인수를 추가할 수 있습니다.

ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=tecmint group=tecmint"

표시된 대로 mkdir -p와 유사한 방식으로 디렉토리를 생성할 수도 있습니다.

ansible webservers -m file -a "dest=/path/to/directory mode=755 owner=tecmint group=tecmint state=directory"

예를 들어,

ansible webservers -m file -a "dest=/home/tecmint/data mode=755 owner=tecmint group=tecmint state=directory"

결론

이 기사에서는 원격 호스트를 관리하기 위해 Ansible 임시 명령을 실행하도록 관리 노드를 구성하는 방법을 설명합니다. 이 정보가 도움이 되셨기를 바랍니다. 한번 시도해 보고 어떻게 되었는지 알려주세요.