728x90

authorized_keys란

- 인증된 키

- 이미 사용 허가를 받아 믿을 수 있는 사용자

 

authorized_keys 적용 과정

1. 앤서블 서버에서 앤서블 노드로 접속 시도

2. 앤서블 노드의 ~/.ssh/authorized_keys 파일의 존재 확인

3. authorized_keys 파일에 해당 호스트의 접속 허가 정보가 저장되어 있다면  접속 허용

 

 

autopass.yml 파일 수정

1) vars: 추가

2) ssh-keygen for authorized_keys file과 input key for each node 부분 추가

  vars:
    ansible_password: vagrant
    - name: ssh-keygen for authorized_keys file
      command: "ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N ''"
      ignore_errors: yes
      run_once: true

    - name: input key for each node
      connection: ssh
      authorized_key:
        user: vagrant
        state: present
        key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

코드 전체

---
- name: Create authority between server and nodes
  hosts: nodes
  connection: local
  serial: 1
  gather_facts: no
  vars:
    ansible_password: vagrant

  tasks:
    - name: ssh-keyscan for known_hosts file
      command: /usr/bin/ssh-keyscan -t ecdsa {{ ansible_host }}
      register: keyscan

    - name: input key
      lineinfile:      
        path: ~/.ssh/known_hosts
        line: "{{ item }}"
        create: yes     
      with_items:
        - "{{ keyscan.stdout_lines }}"

    - name: ssh-keygen for authorized_keys file
      command: "ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N ''"
      ignore_errors: yes
      run_once: true

    - name: input key for each node
      connection: ssh
      authorized_key:
        user: vagrant
        state: present
        key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

 

vag_reconf.bat 파일 실행

PS C:\HashiCorp\udemy-ansible> .\vag_reconf.bat

 

 

-k 옵션과 암호 입력 없이 통신 확인 가능

ans nodes -m ping

728x90
728x90

known_hosts란

- 알려진 호스트

- 이미 알고 있어 확인하지 않아도 되는 호스트

 

Vagrantfile 파일 수정

Ansible Server 영역에 두 줄 추가

    cfg.vm.provision "file", source: "auto_pass.yml", destination: "auto_pass.yml"
    cfg.vm.provision "shell", inline: "ansible-playbook auto_pass.yml", privileged: false
  #================#
  # Ansible Server #
  #================#
  
  config.vm.define "ansible-server" do |cfg|
    cfg.vm.box = "centos/7"
    cfg.vm.provider "virtualbox" do |vb|
      vb.name = "Ansible-Server"
      end
    cfg.vm.host_name = "ansible-server"
    cfg.vm.network "public_network", ip: "172.30.1.100"
    cfg.vm.network "forwarded_port", guest: 22, host: 60010, auto_correct: true, id: "ssh"
    cfg.vm.synced_folder "../data", "/vagrant", disabled: true
    cfg.vm.provision "shell", inline: "yum install epel-release -y"
    cfg.vm.provision "shell", inline: "yum install ansible -y"
    cfg.vm.provision "file", source: "ansible_env_ready.yml", 
      destination: "ansible_env_ready.yml"
    cfg.vm.provision "shell", inline: "ansible-playbook ansible_env_ready.yml"
    cfg.vm.provision "file", source: "auto_pass.yml", destination: "auto_pass.yml"	# 추가
    cfg.vm.provision "shell", inline: "ansible-playbook auto_pass.yml", privileged: false	# 추가
  end

 

ansible_env_ready.yml 파일 수정

해당 부분 지우기

    - name: Generate sshkey
      become: yes
      become_user: vagrant
      shell: "{{ item }}"
      with_items:
        - "ssh-keyscan 172.30.1.101 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.102 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.103 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.104 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.105 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.201 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.202 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.203 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.204 >> ~/.ssh/known_hosts"
        - "ssh-keyscan 172.30.1.205 >> ~/.ssh/known_hosts"

 

auto_pass.yml 파일 생성

ansible_host: /etc/ansible/hosts 파일에 등록된 모든 호스트

keyscan.stdout_lines: keyscan 명령 실행 결과를 with_items를 이용해 지속적으로 출력함

  -> 출력 결과는 다시 ~/.ssh/known_hosts로 입력됨

 

---
- name: Create authority between server and nodes
  hosts: nodes
  connection: local
  serial: 1
  gather_facts: no

  tasks:
    - name: ssh-keyscan for known_hosts file
      command: /usr/bin/ssh-keyscan -t ecdsa {{ ansible_host }}
      register: keyscan

    - name: input key
      lineinfile:      
        path: ~/.ssh/known_hosts
        line: "{{ item }}"
        create: yes     
      with_items:
        - "{{ keyscan.stdout_lines }}"

 

vag_reconf.bat 실행

- known_hosts 자동 등록을 위해 생성한 auto_pass.yml 파일과 수정한 Vagranfile이 제대로 적용되는지 vag_reconf.bat 파일을 실행하여 테스트 진행

- 파일 실행 결과: 모든 가상 머신이 삭제되고 재생성되어 결과 마지막 부분에서 known_hosts를 자동으로 등록한 것을 확인할 수 있음

 

[ 배치 파일의 LF, CR ]

- 유닉스/리눅스 OS의 경우 유닉스 타입의 LF( Line Feed: 커서를 현재 행의 다음 행으로, 즉 아래로 이동 )를 사용함

- 윈도우 OS의 경우 CR( Carriage Return: 커서를 현재 행의 제일 좌측으로 이동 )과 LF를 동시에 사용함 > 따라서 해당 파일을 실행하려면 CRLF( 커서를 다음 줄, 그 줄의 시작 부분으로 이동) 타입으로 변경하고 저장해야 함

 

@echo off
setlocal 
set /p name=어느 vagrant를 재구성 및 시작하시겠습니까? ^
모두는 그냥 enter를 입력 하세요: || set name=default

if %name%==default (
	vagrant halt && vagrant destroy -f && vagrant up
) else (
    vagrant halt %name% && vagrant destroy %name% -f && vagrant up %name%
)
PS C:\HashiCorp\udemy-ansible> .\vag_reconf.bat

통신 확인

- 모든 노드에 ping이 앤서블을 통해서 전달된 것을 확인할 수 있음

PS C:\HashiCorp\udemy-ansible> vagrant ssh ansible-server
[vagrant@ansible-server ~]$ ans nodes -m ping -k
SSH password: # vagrant

728x90
728x90

아키텍처

 

 

아래 링크로 접속하여 파일을 모두 다운로드하고 vagrant up으로 실습 환경 구성

 

https://github.com/sysnet4admin/_Book_Ansible/tree/master/6.%20%ED%94%8C%EB%A0%88%EC%9D%B4%EB%B6%81%EC%9D%84%20%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0/6.1.1.%20%EA%B8%B0%EB%B3%B8%20%EC%8B%A4%EC%8A%B5%20%ED%99%98%EA%B2%BD%EC%9D%84%20%EA%B5%AC%EC%84%B1%ED%95%98%EA%B8%B0

 

 

 

728x90
728x90

아키텍처

 

 

 

구성 순서

1. Vagrantfile

2. Ansible_env_ready.yml

3. add_ssh_auth.sh

4. vagrant up

  - Vagrantfile 실행

5. vagrant provision ansible-server

  - Ansible_env_ready.yml, add_ssh_auth.sh 실행

 

 

Vagrantfile 작성

Ansible-Node03, Ansible-Node04 부분 추가

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant_API_Version = "2"

Vagrant.configure(Vagrant_API_Version) do |config|

  # Ansible-Node01
  config.vm.define:"ansible-node01" do |cfg|
		cfg.vm.box = "centos/7"
		cfg.vm.provider:virtualbox do |vb|
			vb.name = "Ansible-Node01"
      vb.customize ["modifyvm", :id, "--cpus",1]
      vb.customize ["modifyvm", :id, "--memory",512]
		end
		cfg.vm.host_name = "ansible-node01"
		cfg.vm.synced_folder ".", "/vagrant", disabled: true
		cfg.vm.network "public_network", ip: "172.30.1.110"
		cfg.vm.network "forwarded_port", guest: 22, host: 19211, auto_correct: false, id: "ssh"
    cfg.vm.provision "shell", path: "bash_ssh_conf_4_CentOS.sh"
		
	end
  
  # Ansible-Node02
  config.vm.define:"ansible-node02" do |cfg|
		cfg.vm.box = "centos/7"
		cfg.vm.provider:virtualbox do |vb|
			vb.name = "Ansible-Node02"
      vb.customize ["modifyvm", :id, "--cpus",1]
      vb.customize ["modifyvm", :id, "--memory",512]
		end
		cfg.vm.host_name = "ansible-node02"
		cfg.vm.synced_folder ".", "/vagrant", disabled: true
		cfg.vm.network "public_network", ip: "172.30.1.120"
		cfg.vm.network "forwarded_port", guest: 22, host: 19212, auto_correct: false, id: "ssh"
    cfg.vm.provision "shell", path: "bash_ssh_conf_4_CentOS.sh"
		
	end  
 
  # Ansible-Node03
  config.vm.define:"ansible-node03" do |cfg|
		cfg.vm.box = "ubuntu/trusty64"
		cfg.vm.provider:virtualbox do |vb|
			vb.name = "Ansible-Node03"
      vb.customize ["modifyvm", :id, "--cpus",1]
      vb.customize ["modifyvm", :id, "--memory",512]
		end
		cfg.vm.host_name = "ansible-node03"
		cfg.vm.synced_folder ".", "/vagrant", disabled: true
		cfg.vm.network "public_network", ip: "172.30.1.130"
		cfg.vm.network "forwarded_port", guest: 22, host: 19213, auto_correct: false, id: "ssh"
    
		
	end
  
  # Ansible-Node04
  config.vm.define:"ansible-node04" do |cfg|
		cfg.vm.box = "ubuntu/trusty64"
		cfg.vm.provider:virtualbox do |vb|
			vb.name = "Ansible-Node04"
      vb.customize ["modifyvm", :id, "--cpus",1]
      vb.customize ["modifyvm", :id, "--memory",512]
		end
		cfg.vm.host_name = "ansible-node04"
		cfg.vm.synced_folder ".", "/vagrant", disabled: true
		cfg.vm.network "public_network", ip: "172.30.1.140"
		cfg.vm.network "forwarded_port", guest: 22, host: 19214, auto_correct: false, id: "ssh"
    
		
	end 
  
  
  # Ansible-Server
	config.vm.define:"ansible-server" do |cfg|
		cfg.vm.box = "centos/7"
		cfg.vm.provider:virtualbox do |vb|
			vb.name = "Ansible-Server"
		end
		cfg.vm.host_name = "ansible-server"
		cfg.vm.synced_folder ".", "/vagrant", disabled: true
		cfg.vm.network "public_network", ip: "172.30.1.100"
		cfg.vm.network "forwarded_port", guest: 22, host: 19210, auto_correct: false, id: "ssh"
		cfg.vm.provision "shell", path: "bootstrap.sh"
		cfg.vm.provision "file", source: "Ansible_env_ready.yml", destination: "Ansible_env_ready.yml"
		cfg.vm.provision "shell", inline: "ansible-playbook Ansible_env_ready.yml"
    cfg.vm.provision "shell", path: "add_ssh_auth.sh", privileged: false
    cfg.vm.provision "file", source: "Ansible_ssh_conf_4_CentOS.yml", destination: "Ansible_ssh_conf_4_CentOS.yml"
		cfg.vm.provision "shell", inline: "ansible-playbook Ansible_ssh_conf_4_CentOS.yml"
	end
  
end

 

 

Ansible_env_ready.yml 파일 수정

node03, node04 관련 코드 추가

---
- name: Setup for the Ansible's Environment
  hosts: localhost
  gather_facts: no
  
  tasks:
  
    - name: Add "/etc/hosts"
      blockinfile:  |
        path=/etc/hosts
        content="
          172.30.1.100  server
          172.30.1.110  node01
          172.30.1.120  node02
          172.30.1.130  node03
          172.30.1.140  node04"
          
    - name: Add "/etc/ansible/hosts"
      blockinfile:  |
        path=/etc/ansible/hosts
        content="
          [CentOS]
            node01
            node02
            
          [Ubuntu]
            node03
            node04"
            
    - name: Install sshpass for Authentication
      yum:
        name: sshpass
        state:  present
          
 
    - name: Install vim-enhanced
      yum:
        name: vim-enhanced
        state: present
        
    - name: Install git
      yum:
        name: git
        state: present

    - name: Download pathogen.vim
      shell: "curl -fLo /home/vagrant/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim"

    - name: Git clone vim-ansible-yaml
      git:
        repo: 'https://github.com/chase/vim-ansible-yaml.git'
        dest: /home/vagrant/.vim/bundle/vim-ansible-yaml

    - name: Configure vimrc
      lineinfile:
        path: /home/vagrant/.vimrc
        line: "{{ item }}"
      with_items:
        - "set number"
        - "execute pathogen#infect()"
        - "syntax on"
        - autocmd FileType yaml setlocal ts=2 sts=2 sw=2 et ai

    - name: Configure Bashrc
      lineinfile:
        path: /home/vagrant/.bashrc
        line: "{{ item }}"
      with_items:
        - "alias vi='vim'"
        - "alias ans='ansible'"
        - "alias anp='ansible-playbook'"

 

add_ssh_auth.sh 파일 수정

node03, node04 추가

#! /usr/bin/env bash

# ssh key 생성
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node01
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node02
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node03
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node04

 

vagrant up 실행

Vagrantfile이 실행됨

 

vagrant provision

Ansible_env_ready.yml 파일과 add_ssh_auth.sh 파일 실행

PS C:\HashiCorp\udemy-ansible> vagrant provision ansible-server

 

통신 확인

PS C:\HashiCorp\udemy-ansible> vagrant ssh ansible-server
Last login: Wed Jun  8 19:11:49 2022 from 10.0.2.2

[vagrant@ansible-server ~]$ ans all -m ping -k

 

728x90
728x90

실습 개요


실습 목적

- 하나의 플레이북으로 두 개의 작업 진행

 

실습 과정

1. 앤서블 서버에 공유 디렉토리를 생성

2. 앤서블 노드들이 공유 디렉토리에 접근할 수 있도록 설정

 - 로컬 디렉토리처럼 사용

 

아키텍처

 

 

 


nfs.yml 파일 생성


  1 ---
  2 - name: Setup for nfs server
  3   gather_facts: no
  4   hosts: localhost
  5
  6   tasks:
  7     - name: make nfs_shared directory
  8       file:
  9         path: /home/vagrant/nfs_shared
 10         state: directory
 11         mode: 0777
 12
 13     - name: configure /etc/exports
 14       become: yes
 15       lineinfile:
 16         path: /etc/exports
 17         line: /home/vagrant/nfs_shared 172.30.1.0/24(rw,sync)
 18
 19     - name: nfs service restart
 20       become: yes
 21       service:
 22         name: nfs
 23         state: restarted
 24
 25
 26 - name: Setup for nfs clients
 27   gather_facts: no
 28   hosts: CentOS
 29
 30   tasks:
 31     - name: make nfs_client directory
 32       file:
 33         path: /home/vagrant/nfs
 34         state: directory
 35
 36     - name: mount point directory as client
 37       become: yes
 38       mount:
 39         name: /home/vagrant/nfs
 40         src: 172.30.1.100:/home/vagrant/nfs_shared
 41         fstype: nfs
 42         opts: nfsvers=3
 43         state: mounted

 

 

nfs 서버 설정 확인


플레이북 실행 전: 설정 사항 없음

[vagrant@ansible-server ~]$ cat /etc/exports
[vagrant@ansible-server ~]$
[vagrant@ansible-server ~]$ exportfs
exportfs: could not open /var/lib/nfs/.etab.lock for locking: errno 13 (Permission denied)

 

플레이북 실행 후: 각각의 노드의 /home/vagrant/nfs 경로에 호스트 이름으로 파일 생성

# ansible-node01
PS C:\HashiCorp\udemy-ansible> vagrant ssh ansible-node01
[vagrant@ansible-node01 ~]$ ls
nfs
[vagrant@ansible-node01 ~]$ cd nfs
[vagrant@ansible-node01 nfs]$ ls
[vagrant@ansible-node01 nfs]$ touch $HOSTNAME
[vagrant@ansible-node01 nfs]$ ls
ansible-node01

# ansible-node02
PS C:\HashiCorp\udemy-ansible> vagrant ssh ansible-node02
[vagrant@ansible-node02 ~]$ ls
nfs
[vagrant@ansible-node02 ~]$ cd nfs
[vagrant@ansible-node02 nfs]$ ls
ansible-node01
[vagrant@ansible-node02 nfs]$ touch $HOSTNAME
[vagrant@ansible-node02 nfs]$ ls
ansible-node01  ansible-node02

 

앤서블 서버의 공유 디렉토리에 마운트 확인: 앤서블 서버의 nfs 공유 디렉토리에서 파일 확인

[vagrant@ansible-server nfs_shared]$ ls
ansible-node01  ansible-node02
728x90
728x90

앤서블 노드의 timezone 설정

1. timezone.yml 파일 생성

---
- name: Setup CentOS timezone
  hosts: CentOS
  gather_facts: no
  become: yes

  tasks:
    - name: set timezone to Asia/Seoul
      timezone: name=Asia/Seoul

 

2. 파일 실행

[vagrant@ansible-server ~]$ anp timezone.yml -k
SSH password:

PLAY [Setup CentOS timezone] *****************************************************************

TASK [set timezone to Asia/Seoul] ************************************************************
changed: [node01]
changed: [node02]

PLAY RECAP ***********************************************************************************
node01                     : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node02                     : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

 

3. 확인

- 이 때, 앤서블 서버의 timezone은 변경되지 않음

- 앤서블 노드의 timezone만 변경된 것을 확인할 수 있음

# ansible-node01의 timezone
[vagrant@ansible-server ~]$ ssh vagrant@172.30.1.110
vagrant@172.30.1.110's password:
Last login: Wed Jun  8 19:45:46 2022 from 172.30.1.100

[vagrant@ansible-node01 ~]$ date
Wed Jun  8 19:46:59 KST 2022

# ansible-node02의 timezone
[vagrant@ansible-server ~]$ ssh vagrant@172.30.1.120
vagrant@172.30.1.120's password:
Last login: Wed Jun  8 19:45:46 2022 from 172.30.1.100

[vagrant@ansible-node02 ~]$ date
Wed Jun  8 19:57:56 KST 2022

 

 

앤서블 서버의 timezone 설정

# timezone 변경 전
[vagrant@ansible-server ~]$ date
Wed Jun  8 10:45:49 UTC 2022

[vagrant@ansible-server ~]$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# timezone 변경 후
[vagrant@ansible-server ~]$ date
Wed Jun  8 19:50:08 KST 2022

 

 

728x90
728x90

실습 과정

- 앤서블 서버에서 작업

1. 설치 (nginx_install.yml)

2. 파일 전송

3. 서비스 재시작

4. 삭제 (nginx_remove.yml)

 

앤서블 서버에서 nginx_install.yml 파일 생성

  1 ---
  2 - name: Install nginx on CentOS
  3   hosts: CentOS # node01, node02를 지칭함
  4   gather_facts: no
  5   become: yes # root 권한 부여
  6
  7   tasks:
  8     - name: install epel-release
  9       yum: name=epel-release state=latest
 10     - name: install nginx web server
 11       yum: name=nginx state=present
 12     - name: Upload default index.html for web server
 13       get_url: url=https://www.nginx.com dest=/usr/share/nginx/html/ mode=0644
 14     - name: Start nginx web server
 15       service: name=nginx state=started

 

앤서블 서버에서 nginx_remove.yml 파일 생성

  1 ---
  2 - name: Remove nginx on CentOS
  3   hosts: CentOS # node01, node02를 지칭함
  4   gather_facts: no
  5   become: yes # root 권한 부여
  6
  7   tasks:
  8     - name: remove epel-release
  9       yum: name=epel-release state=absent
 10     - name: remove nginx web server
 11       yum: name=nginx state=absent

 

플레이북을 이용해 각각의 노드에 nginx 설치

[vagrant@ansible-server ~]$ anp nginx_install.yml -k
SSH password: # vagrant

PLAY [Install nginx on CentOS] ***************************************************************

TASK [install epel-release] ******************************************************************
changed: [node02]
changed: [node01]

TASK [install nginx web server] **************************************************************
changed: [node01]
changed: [node02]

TASK [Upload default index.html for web server] **********************************************
changed: [node01]
changed: [node02]

TASK [Start nginx web server] ****************************************************************
changed: [node02]
changed: [node01]

PLAY RECAP ***********************************************************************************
node01                     : ok=4    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node02                     : ok=4    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

 

웹 브라우저에서 노드의 IP 주소로 접속하여 nginx 기본 페이지 확인

 

 

nginx 삭제

[vagrant@ansible-server ~]$ anp nginx_remove.yml -k
SSH password: # vagrant

PLAY [Remove nginx on CentOS] ****************************************************************

TASK [remove epel-release] *******************************************************************
changed: [node01]
changed: [node02]

TASK [remove nginx web server] ***************************************************************
changed: [node02]
changed: [node01]

PLAY RECAP ***********************************************************************************
node01                     : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node02                     : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

 

728x90
728x90

/etc/ssh/sshd_config 파일 설정


SSH 접속이 가능하도록 설정

- /etc/ssh/sshd_config 파일의 PasswordAuthentication no 를 yes로 변경

 

현재 SSH 접속이 안 됨

 

파일 수정 방법

1. 앤서블 플레이북

2. 배시 쉘 프로그래밍

 

앤서블 플레이북을 이용하여 SSH 접속 설정


Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant_API_Version = "2"

Vagrant.configure(Vagrant_API_Version) do |config|

  # Ansible-Node01
  	config.vm.define:"ansible-node01" do |cfg|
		cfg.vm.box = "centos/7"
		cfg.vm.provider:virtualbox do |vb|
			vb.name = "Ansible-Node01"
      		vb.customize ["modifyvm", :id, "--cpus",1]
      		vb.customize ["modifyvm", :id, "--memory",512]
		end
		cfg.vm.host_name = "ansible-node01"
		cfg.vm.synced_folder ".", "/vagrant", disabled: true
		cfg.vm.network "public_network", ip: "172.30.1.110"
		cfg.vm.network "forwarded_port", guest: 22, host: 19211, auto_correct: false, id: "ssh"
    	cfg.vm.provision "shell", path: "bash_ssh_conf_4_CentOS.sh"
		
	end
  
  # Ansible-Node02
  	config.vm.define:"ansible-node02" do |cfg|
		cfg.vm.box = "centos/7"
		cfg.vm.provider:virtualbox do |vb|
			vb.name = "Ansible-Node02"
      		vb.customize ["modifyvm", :id, "--cpus",1]
      		vb.customize ["modifyvm", :id, "--memory",512]
		end
		cfg.vm.host_name = "ansible-node02"
		cfg.vm.synced_folder ".", "/vagrant", disabled: true
		cfg.vm.network "public_network", ip: "172.30.1.120"
		cfg.vm.network "forwarded_port", guest: 22, host: 19212, auto_correct: false, id: "ssh"
    	cfg.vm.provision "shell", path: "bash_ssh_conf_4_CentOS.sh"
		
	end  
  
  
  
  # Ansible-Server
	config.vm.define:"ansible-server" do |cfg|
		cfg.vm.box = "centos/7"
		cfg.vm.provider:virtualbox do |vb|
			vb.name = "Ansible-Server"
		end
		cfg.vm.host_name = "ansible-server"
		cfg.vm.synced_folder ".", "/vagrant", disabled: true
		cfg.vm.network "public_network", ip: "172.30.1.100"
		cfg.vm.network "forwarded_port", guest: 22, host: 19210, auto_correct: false, id: "ssh"
		cfg.vm.provision "shell", path: "bootstrap.sh"
		cfg.vm.provision "file", source: "Ansible_env_ready.yml", destination: "Ansible_env_ready.yml"
		cfg.vm.provision "shell", inline: "ansible-playbook Ansible_env_ready.yml"
    	cfg.vm.provision "shell", path: "add_ssh_auth.sh", privileged: false
    	cfg.vm.provision "file", source: "Ansible_ssh_conf_4_CentOS.yml", destination: "Ansible_ssh_conf_4_CentOS.yml"
		cfg.vm.provision "shell", inline: "ansible-playbook Ansible_ssh_conf_4_CentOS.yml"
	end
  
end

 

bash_ssh_conf_4_CentOS.sh

#! /usr/bin/env bash

now=$(data +"%m_%d_%Y")
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_$now.backup
sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
systemctl restart sshd

 

 

Ansible_ssh_conf_4_CentOS.yml

---
- name: Ansible_ssh_conf_4_CentOS
  hosts: localhost
  gather_facts: no
  
  tasks:
    - name: PasswordAuthentication change from no to yes
      replace:
        dest: /etc/ssh/sshd_config
        regexp: 'PasswordAuthentication no'
        replace: 'PasswordAuthentication yes'
        backup: yes
        
    - name: sshd restart to apply "PasswordAuthentication"
      service:
        name: sshd
        state: restarted

 

vagrant provision

ansible-server로 접속하여 통신 확인

SSH password: vagrant

 

설정 파일이 실제로 수정되었는지 확인: yes로 수정된 것을 확인할 수 있음

/etc/ssh/sshd_cofig

 

 

728x90

+ Recent posts