2017년 6월 8일 목요일

[Ansible] 동작 테스트 하기 (2)

3. ansible 기본 테스트 

자 이제 테스트 할 시간입니다. 
그런데 여러 번을 테스트해도 아마 구성이 이와 같다면 안될 것 입니다. 

구성 : RHEL (명령 보내주는 애) <-> 우분투 (명령 받아주는 애)
          IP  10.0.2.15                       IP 10.0.2.4

오류#1
[root@Ansible ansible]# ansible all -m ping -k
SSH password: 
10.0.2.4 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 10.0.2.4 port 22: Connection refused\r\n", 
    "unreachable": true

왜냐면....기본 우분투에서는 ssh가 설치 조치 안되어 있기 때문입니다. 
따라서 우분투(cuda)에서 ssh 설치 부터 합니다. 

cuda@cuda-VirtualBox:~$ sudo apt-get install ssh 
<찌잉찌잉 설치>


sshd : 10.0.2.15 내용을 입력해 줍니다. 
cuda@cuda-VirtualBox:~$ sudo vi /etc/hosts.allow 

확인합니다.
cuda@cuda-VirtualBox:~$ sudo tail -n 1  /etc/hosts.allow 
sshd : 10.0.2.15

서비스를 재 시작합니다.
cuda@cuda-VirtualBox:~$ sudo service ssh restart

이때쯤 되니 sudo 치는게 슬슬 짜증납니다. 
루트를 봉인해제 할까도 고민했는데...최대한 디폴트에서 하려고..놔둡니다. 

이제 다시 테스트합니다. 
오류 내용이 바뀌었네요. 

오류#2
[root@Ansible ansible]# ansible all -m ping -k
SSH password: 
10.0.2.4 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Authentication failure.", 
    "unreachable": true

보아하니 루트로 땡기고 있는거 같습니다. 

우분투는 디폴트가 루트를 사용을 못하게 막았기 때문에 이런 조건을 지키고 하려면 두가지 방법이 있습니다.

1) 명령에서 유저이름 넣기
[root@Ansible ~]# ansible all -m ping -k --user=cuda

2) hosts에다가 유저 이름 넣기 (/etc/ansible/hosts)
10.0.2.4 ansible_user=cuda

이제 잘되네요. :) 
[root@Ansible ansible]# ansible all -m ping -k
SSH password: 
10.0.2.4 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}


4. ansible을 이용해 다양한 테스트 하기 

다양한 테스트를 하려면 한개만 호스트에 등록되면 안되겠죠?
여러개를 등록해 보겠습니다. 역시 명령에 이름을 넣지 않으려면 이름도 등록해야겠죠?

유투브를 보고 났더니..왠지 모르게 따라하고 싶죠?
(-_-; 죄송합니다.)

4_1. 호스트 추가

/etc/ansible/hosts에 다음과 같은 내용을 추가합니다. 개개인 마다 당연히 설정이 다를 것입니다.
10.0.2.4 ansible_user=cuda
10.0.2.5 ansible_user=minsky_offline_toolkit
10.0.2.6 ansible_user=hoonjo


새로 추가를 할때는 우분투라면 역시 ssh 설치와 설정을 해줘야 한다.
그럼에도 불구하고 이런 메세지를 아마도 만나게 될 것이다.

[root@Ansible ~]# ansible all -m ping -k 
SSH password: 
10.0.2.6 | FAILED! => {
    "failed": true, 
    "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
}
10.0.2.5 | FAILED! => {
    "failed": true, 
    "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
}
10.0.2.4 | SUCCESS => {
    "changed": false, 
    "ping": "pong"


이는 아직 공개키가 교환되지 않았기 때문이다.
아마도 여러가지의 방법이 있을텐데, 무식하지만 편하게 다음과 같이 입력하고 'yes'를 입력한다.

[root@Ansible ~]# ansible all -m ping 
The authenticity of host '10.0.2.6 (10.0.2.6)' can't be established.
ECDSA key fingerprint is db:e7:b8:dc:e5:76:1a:18:9b:96:29:18:a1:90:1f:b7.
Are you sure you want to continue connecting (yes/no)? 10.0.2.5 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n", 
    "unreachable": true
}
10.0.2.4 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n", 
    "unreachable": true
}
yes
10.0.2.6 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Warning: Permanently added '10.0.2.6' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,password).\r\n", 
    "unreachable": true


한번 더 실행한다.

[root@Ansible ~]# ansible all -m ping -k 
SSH password: 
10.0.2.6 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.0.2.5 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.0.2.4 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}


4_2. 본격적인 테스트

어디 메모리 현재 상태를 좀 볼까?
셸(배시)실행 명령어는 -m 옵션에서 shell이라고 입력한 이후에 -a에서 실제 명령어를 입력합니다.


전체 관리 가상머신에 파일을 좀 보내볼까?

ansible all -m copy -a "src=/root/awesome_file dest=~/"


잘 전송되었나 확인 
awesome_file이 잘 있음



이외에 유저가 아니라 root또는 su에 준하는 권한을 획득한다면 패키지 관리 및 설치, 서비스 관리, git에서 소스 다운로드 하고 커밋하기등 다양한 작업을 모두 할 수 있다.

지금 드는 생각은..순수하게 리눅스만 관리하는게 아니라..NXOS(시스코의 데이터센터 대표 운영체제중에 하나)나 SSH 접속으로 이루어지는 모든 운영체제를 이걸로 통합 관리할 수 있겠다는 생각이...
덜덜덜;;;; 너무 쉽고 편해서 할말이....
아마 이러다 보니 레드햇에서 앤서블을 패키지하고 이런 기능을 통합하여 편의성 있기 UI를 입힌다음에 명령어 단으로 올려서 전체를 패키지하고 있는것 같다.

하나 보면 제가 책에 7장에서 언급한 것과 동일한 논리이고, 예전에는 내부적으로는 똑같은 모듈인 paramiko를 사용했네요. 지금은 paramiko가 느려서 ssh를 직접 사용한다는 거 같고...이쯤 되면 왠만큼 통합 관리가 가능할 것 같은데....

HW 장비들을 가지고 다음에 테스트를 해봐야겠네요
음...Agent(설치된 호스트)없이 ssh로 순수하게 동작하는 방식이라서..
거의 다 될꺼 같은데 말이죠..




그 다음에는 앤서블을 자동화 하는 playbook 다루어 보겠습니다~

주 참고 사이트 :
http://theeye.pe.kr/archives/2582
http://docs.ansible.com/ansible/intro_adhoc.html

에러에 대해서 참고 사이트 :
https://github.com/ansible/ansible/issues/19584


추가 #1
우분투에는 16.04 버전에 ssh가 기본적으로 설치되어 있지 않기 때문에
ssh 데몬을 설치해 주고 허용해 줘야 한다.

sudo apt-get install ssh 
sudo vi /etc/hosts.allow

다음의 내용을 입력 sshd: <ip> 

그리고 재 시작. 
sudo /etc/init.d/ssh restart 


0 개의 댓글:

댓글 쓰기

 
Copyright © . 시스템/네트워크 자동화 전문가 블로그 - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger