설명서
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 |