서버 여러대를 그룹으로 나누어 따로 따로 명렁어를 내려보겠다.
AWS EC2 의 cwCool name의 Controller 서버 1 대,
내 공유기의 ESXi Ubuntu server 1대,
AWS EC2 새로운 인스턴스 3대를 생성해서 진행하겠다.
즉 , cwCool 인스턴스가 4대를 관리하는것
기존 ansible이 설치된 cwCool을 제외한 3개의 인스턴스를 추가 생성하였다.
🔥 여기서 잠깐 🔥
원래 ssh-copy-id 명령어를 사용해서 쉽게 공개키를 보내려 하였다.
하지만 aws ec2 인스턴스들은 pem파일을 넣어야 접속이 가능한 문제때문에
ssh 명령어에 pem 파일 추가하는 방법은 찾았으나,
ssh-copy-id 명령어에 pem 파일도 추가해서 보내는것을 할 수가 없음….
그냥 하나하나 공개키를 추가하기로 했음..
(나중에 방법을 찾으면 추가하겠습니다. 아시는분 댓글 달아주심 감사)
Controller 인스턴스 home 디렉터리에 EC2 접속시 필요한 pem 파일을 넣었다.
chmod 600 [해당 파일명]
pem키를 사용해서 ssh 접속을 진행하러면 pem파일의 권한을 열어주어야 한다.
ssh -i [pem 파일 경로] [사용자이름]@[접속할 IP]
pem 키 파일을 넣고 접속이 문제없이 진행되었다.
vi /home/ec2-user/.ssh/authorized_keys
호스트 서버로 접속하였으니, 해당 서버의 authorized_keys로 들어가 복사했던
키를 넣어준다.
윗 줄은 이미 들어가있는 키값(pem파일) 이고, 뒤로 이어서 작성해주면 된다.
키 값에는 공백이 있으면 안된다!!!
동일하게 모든 인스턴스에 적용시킨다.
인벤토리 파일에 ip 추가 완료
오류가 발생했다..unreachable.....failed to connect to the host via ssh: premission denied...
ssh-copy-id로 키를 전달한 ubuntu는 잘 작동된다..
ec2 인스턴스들에게는 공개키 추가만 했을뿐, 공개키 자체 파일을 보내지 않았기 때문인걸로 예상.
공개키도 전송한뒤 다시 시도해보겠다.
scp 명령어로 공개키를 전송해도 작동되지않는다.
그런데...
혹시 몰라서 공개 키 내용을 다시 넣어봤더니 잘 작동된다….
키를 넣을때 공백 등 내용에 문제가 있어나봄….
🛰️ 주의 ! 명령어에 -u ec2-user를 주지 않으면 현재 실행 계정과 동일한 계정명으로 시도한다.
여러 서버를 그룹으로 나눠 따로 명령어 내보내기
연결된 호스트 전체 명령내리기
-u 명령어를 더 추기하는 방법을 찾지 못해 ubuntu server도 ec2-user라는 사용자를 추가했다.
(이젠 ec2-user 로 명령을 넣으면 4개의 서버가 반응할것.)
$ ansible -m command -a 'ls /' all -u ec2-user
이제 따로 명령어를 내리게 해볼 것이다.
vi group.ini을 만들어 내용을 넣어주겠다.
ansible_user=[유저이름] 은 -u [유저이름] 이 명령어를 자동으로 인식되게 만들어준다.
그룹 chan, woo 2개에 서버 2개씩 주소를 넣어주었다.
본인의 경로 : /home/ec2-user/.ssh/test/group.ini
ansible --list-hosts web -i group.ini - web그룹 확인하기
ansible --list-hosts host -i group.ini - host그룹 확인하기
ansible --list-hosts all -i group.ini - 전체 확인하기
🔥 주의사항 ! ansible 명령어를 ini 파일을 이용해서 사용할 때는 해당 파일이 있는 디렉터리에서 사용하여야 된다. 본인도 계속 먹통이라 찾아봤는데 경로문제였다…
각 그룹에 명령어를 내려보겠다.
chan 그룹 df -h 명령어
woo 그룹 df -h 명령어
위 명령어로 해당 그룹에 대해서만 명령어가 실행되게 하는법을 진행하였고,
이와 같이 나온 내용을 txt 파일로 저장하려고 한다.
$ ansible -m command -a 'df -h /' > test.txt chan -i group.ini
chan 이라는 그룹 안에 있는 호스트들에 한해서 df -h 명령어를 내리고,
그 결과를 test.txt 라는 이름으로 txt 파일로 저장한다.
만들어진 txt 파일은 명령을 내렸던 ansible 서버에 저장된다.
위 사진으로 내용이 보여지며 저장하고 생성된 것을 확인할 수 있다.
cat 명령어로 확인해보면 어떤 서버이고 어떤 내용인지 확인이 가능하다.
만약에 다른 내용을 test.txt로 넣으면 처음에 넣었던 내용들은 사라지고,
새로운 내용들로 저장된다.
++ 내용을 더 추가하기
만들었던 test.txt에 내용을 더 추가하려고 한다.
df -h 명령을 내리고 내용을 이어서 더 추가해본다.
ansible -m command -a 'df -h /' >> test.txt chan -i /home/ec2-user/.ssh/test/group.ini
woo 그룹 free -m 명령어에 이어 chan 그룹 df -h 명령어도 test.txt안에 포함된것을 볼 수 있다.
ansible 서버의 가동시간을 확인한다.
$ ansible localhost -m command -a uptime
'IaC > Ansible_앤서블' 카테고리의 다른 글
[Ansible] When 조건문 트리구조 생성(includ_tasks) (0) | 2023.01.30 |
---|---|
[Ansible] When 조건문 (0) | 2023.01.25 |
[Ansible] 작업 제어 구현 - 오류처리 (0) | 2023.01.19 |
[Ansible] 앤서블(Ansible) Playbook 만들기 - update, shutdown, 파일 복사하기 (0) | 2023.01.13 |
[Ansible] 앤서블(Ansible) 개념과 설치/사용법 (2) | 2023.01.11 |