본문 바로가기
Ansible

Ansible 명령어 실습

by Nirah 2023. 1. 6.

설명서

ansible --help

module에 추가적인 argument가 필요한 경우, -a로 설정한다.

 

 

id 생성

관리 노드들에 일괄적으로 kevin이라는 user id를 생성하자.

ansible 에러메세지에 대한 트러블슈팅을 해보겠다.

제어 노드의 admin 계정에서 입력한다.

 

ansible webservers -m user -a "name=kevin"

sudo 권한 없이 사용해서 허가권이 거부된 것이다.

 

뒤에 root 계정으로 명령을 실행한다는 내용을 넣어주자.

ansible webservers -m user -a "name=kevin" -u root

이젠 ssh 인증 key가 없어서 접속이 안된다.

 

vi /ansible/ansible.cfg

become 활성화

 

ansible webservers -m user -a "name=kevin" --become

sudo에 암호가 없어서 에러남

 

ansible webservers -m user -a "name=kevin" --become -k

become 기본 유저가 root로 설정되어 있어서 ssh 인증서가 없으므로 접근 불가

-k 옵션은 --ask-pass 옵션으로 암호를 물어보도록 하는 옵션이다.

 

ansible webservers -m user -a "name=kevin" -u admin --become --become-user root -k

결과창에 각각 노드들에 kevin 계정을 만드는 것을 성공했다고 뜬다.

 

노드1에 찾아가서 한번 kevin이 진짜 만들어졌나 확인해보자.

cat /etc/passwd | grep kevin

 

 

파일 내용 조회

사실 ansible이 있으면 이렇게 일일이 노드1로 찾아가서 결과를 확인해 볼 필요도 없다.

제어 노드에서 한번에 확인 가능하다.

ansible webservers -m shell -a "tail -n1 /etc/passwd" -u admin

 

계정 패스워드 변경

이번엔 사용자 비번을 변경해보겠다.

ansible webservers -m user -a "name=kevin update_password=always password={{ 'dkagh2.' | password_hash('sha512')}}" -u admin

 

노드 1로 찾아가 확인해보면 변경한 비밀번호인 dkagh2.로 로그인이 된다.

 

 

sudo 권한 부여

이제 이 kevin 계정에 유저계성 생성 권한을 줘보겠다.

보다싶이 sudo 권한이 없어서 계정을 만들지 못한다.

sudo useradd alice

 

제어 노드로 다시 가서 kevin 계정을 /etc/sudoers.d에 추가해주자

ansible webservers -m shell -a "echo 'kevin ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/kevin" -u admin

 

다시 node1 ~3 으로 가서 확인해보자.

su - root

ls -a /etc/sudoers.d/kevin

 

 

계정 삭제

제어 노드에서 유저 삭제를 해보자.

ansible webservers -m user -a "name=kevin state=absent remove=yes" -u admin -b

참고로  보통 state=absent 는 삭제이고  state=present는 생성이다.

 

 

패키지 설치

제어 노드에서 관리 노드들에 일괄적으로 yum을 사용하여 httpd를 설치해보겠다.

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

 

 

패키지 설치 확인

각 노드별로 installed 라는 결과가 잘 확인된다.

ansible webservers -m shell -a "yum list installed httpd"

 

 

서비스 시작

ansible webservers -m service -a "name=httpd state=started" -u admin

 

서비스 상태 확인

ansible webservers -m service -a "name=httpd state=started" -u admin

 

 

 

 

 

 

curl http://node1

서비스가 실행 되어 제어 노드에서 봐도 웹 페이지가 출력된다.

 

서비스 중지

ansible webservers -m service -a "name=httpd state=stopped" -u admin

 

 

서비스 재시작

ansible webservers -m service -a "name=httpd state=restarted" -u admin

 

 

패키지 삭제

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

삭제 확인

ansible webservers -m shell -a "yum list installed httpd"

 

 

관리 노드의 정보 수집 (전체)

ansible webservers -m setup -a 'gather_subset=all' > webservers.txt

 

facts로 정보 수집 가능하다.

아래와 같이 파일로 출력시킨것을 확인해본다.

vi webservers.txt

 

정보 수집 (네트워크만)

all 부분을 수집할 특정 키워드로 바꿔주면 된다.

ansible webservers -m setup -a 'gather_subset=network' > webservers_net.txt

 

 

 

ss로 네트워크 세션 확인

ansible webservers -m shell -a "ss -anlt"

 

파일 복사 붙여넣기

 ansible 192.168.108.4 -m copy -a "src=/etc/hosts dest=/tmp/"

복사된 파일 확인

ansible 192.168.108.4 -m shell -a "ls -l /tmp/hosts"

 

 

이름으로 명명

아래와 같이 192.168.108.4를 node1이라고 명칭하면 /etc/hosts에 정의돼있어도 잘 작동하지 않는다.

추가로 아래 경로에도 똑같이 이름을 정의해줘야 이름으로 명명 가능하다.

vi /ansible/hosts

 

파일 권한 변경

file 모듈을 이용하여 파일의 권한을 변경해보겠다.

경로 지정은 dest도 있지만 path도 가능하다.

ansible node1 -m file -a "dest=/tmp/hosts mode=600 owner=admin group=admin"

 

디렉터리 생성

file 모듈을 이용하여 디렉토리를 생성해보겠다.

ansible node1 -m file -a "dest=/tmp/linux mode=600 owner=admin group=admin state=directory"

 

디렉터리 삭제

ansible node1 -m file -a "dest=/tmp/linux state=absent"

 

파일 생성

file 모듈을 사용한 파일 생성

ansible node1 -m file -a "dest=/tmp/windows state=touch"

이번엔 경로 지정을 path로 써서 파일을 생성해보겠다.

ansible node1 -m file -a "path=/tmp/solaris state=touch"

 

 

서버 모니터링

 ansible node1 -m shell -a "vmstat"

 ansible node1 -m shell -a "free -h"

ansible node1 -m shell -a "uptime"

 

 

selinux 상태 변경

ansible node1 -m selinux -a "policy=targeted state=permissive"

ansible node1 -m selinux -a "policy=targeted state=disabled"

ansible node1 -m selinux -a "policy=targeted state=enforcing"

 

firewalld 방화벽 설정 변경

ansible node1 -m firewalld -a "service=http permanent=yes state=enabled"

ansible node1 -m firewalld -a "port=80/tcp permanent=yes state=enabled"

 ansible node1 -m firewalld -a "port=80/tcp permanent=yes state=disabled"

 

유저 생성 및 삭제

 ansible node1 -m user -a "name=user01 uid=2000"

 ansible node1 -m user -a "name=user01 uid=2000 state=absent"

 

 

유저 그룹 생성

ansible node1 -m group -a "name=angels gid=1004 state=present"

확장 그룹 추가하여 유저 생성

sudo useradd user01 -G root

id user01

 

 

 

'Ansible' 카테고리의 다른 글

Ansible-Playbook  (0) 2023.01.09
Ansible-Vault  (0) 2023.01.09
Ansible-Console  (0) 2023.01.09
미니프로젝트- awx 설치  (0) 2023.01.05
Ansible 개념 / 설치  (0) 2023.01.05