A(Client) ---SSH---> B(Server)
/etc/ssh/ssh_host_<Algorithm>.pub
/etc/ssh/ssh_host_<Algorithm>
~/.ssh/known_hosts
파일에 B의 공개키 등록ssh-keygen
~/.ssh/id_rsa
: 개인키~/.ssh/id_rsa.pub
: 공개키~/.ssh/authorized_keys
: 클라이언트의 공개키 등록ssh-copy-id
명령으로 등록~/.ssh/known_hosts
파일에 B의 공개키 등록기본 로그인 사용자
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
ssh-keyscan 192.168.100.11
ssh-keyscan -t <rsa|ecdsa> 192.168.100.11
지문 확인
ssh-keyscan -t ecdsa 192.168.100.11 | ssh-keygen -l -f -
미리 서버의 공개키 등록
ssh-keyscan -t ecdsa 192.168.100.11 >> ~/.ssh/known_hosts
/etc/ssh/ssh_config
: 클라이언트 설정 파일/etc/ssh/sshd_config
: 서버의 설정 파일/etc/ssh/sshd_config
PasswordAuthentication no # 패스워드 인증
GSSAPIAuthentication yes # 키 인증
Client
ssh-keygen
주의: 실제에서는 패스퍼레이즈를 설정
ssh-keyscan -t ecdsa 192.168.100.11 >> ~/.ssh/known_hosts
ssh-keyscan -t ecdsa 192.168.100.12 >> ~/.ssh/known_hosts
ssh-copy-id vagrant@192.168.100.11
ssh-copy-id vagrant@192.168.100.12
vagrant ssh <VM_NAME>
ssh -i .\.vagrant\machines\controller\virtualbox\private_key 192.168.100.10
ssh -i .\.vagrant\machines\node1\virtualbox\private_key vagrant@192.168.100.11
ssh -i .\.vagrant\machines\node2\virtualbox\private_key vagrant@192.168.100.12
~/.ssh/config
Host controller
HostName 192.168.100.10
User vagrant
IdentityFile C:\Users\Playdata\vagrant\ansible\.vagrant\machines\controller\virtualbox\private_key
Host node1
HostName 192.168.100.11
User vagrant
IdentityFile C:\Users\Playdata\vagrant\ansible\.vagrant\machines\node1\virtualbox\private_key
Host node2
HostName 192.168.100.12
User vagrant
IdentityFile C:\Users\Playdata\vagrant\ansible\.vagrant\machines\node2\virtualbox\private_key
Infrastructure as Code: 코드형 인프라
장점
구성 관리: Configuration Management
패키지 설치, 설정 파일, 파일 복사 ...
배포: Provisioning
리소스 새로 생성
리소스 변경, 삭제, 관리
구성관리 도구: Ansible, Chef, Puppet, SaltStack ...
배포: Terraform, Vagrant, AWS CloudFormation
가변: Mutable
Ansible
불변: Immutable
Terraform
참고: 애완동물 vs 소때(가축)
절차적: 순서O
Ansible
선언적: 순서X
Terraform, Kubernetes
마스터, 에이전트: Chef, Puppet, SaltStack
Ansible 설치
controller
sudo yum install centos-release-ansible-29 -y
sudo yum install ansible -y
ubuntu 일 경우
# sudo apt install software-properties-common
# sudo apt-add-repository --yes --update ppa:ansible/ansible
# sudo apt install ansible
설치 확인
ansible --version
호스트 등록
# vi /etc/ansible/hosts
[test]
192.168.100.122
192.168.100.251
ansible all -m ping #핑확인
인벤토리#
vi inventory.ini
192.168.100.11
192.168.100.12
Ad-hoc 명령:
yum 모듈로 httpd 패키지 설치
ansible 192.168.100.11 -i inventory.ini -m yum -a "name=httpd state=present" -b
https://docs.ansible.com/ansible/2.9/modules/yum_module.html#yum-module
service 모듈로 httpd 서비스 시작
ansible 192.168.100.11 -i inventory.ini -m service -a "name=httpd state=started enabled=yes" -b
https://docs.ansible.com/ansible/2.9/modules/service_module.html#service-module
Playbook:
apache_install.yaml
- hosts: 192.168.100.11
tasks:
- yum:
name: httpd
state: present
- service:
name: httpd
enabled: yes
state: started
ubuntu일 경우
apache_install.yaml
- hosts: 192.168.100.11
tasks:
- apt:
name: apache2
state: present
- service:
name: apache2
enabled: yes
state: started
ansible-playbook -i inventory.ini apache_install.yaml -b
IT 인프라 구성 관리 자동화 도구
Ansible:
Control Node, Controller, Ansible Engine
조건: Unix 계열, python
Managed Node, Target Node/Host ...
BM, VM, Instance, Network Device
조건:
Ansible 기능 확장
Ansible 작업 실행 할 수 있는 기본 단위
Python Code
Ansible 임시 실행
하나의 모듈을 실행
하나의 모듈을 실행 --> 하나의 테스크(작업)
하나 이상의 테스크의 모음
하나 이상의 플레이 모음