自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

1、概述分析

因爲互聯網的快速發展致使產品更新換代速度逐漸加快,運維人員天天都要進行
大量的維護操做,仍舊按照傳統方式進行維護會使得工做效率低下。這時,部署自動
化運維就能夠儘量安全、高效地完成這些工做。
通常會把自動化運維工具劃分爲兩類:一類是須要使用代理工具的,也就是基於
專用的ABem程序來完成管理功能,如: Puppet、Func、 Zabbix等;另一類是不需
要配置代理工具的,能夠直接基於SSH服務來完成管理功能,如: Ansible、 Fabric等。
python

-mysql

下面介紹幾款功能相似的自動化運維工具:web

1. Puppet

Pup基於Rpy開發,支持Linx、UNDX、 Windows平臺,能夠針對用戶、系統服務
配置文件、軟件包等進行管理,有很強的擴展性,但遠程執行命令相對較弱。sql

2. SaltStack

CallStack基於 Python開發,容許管理員對多個操做系統建立統一的管理系統,比
pet更輕量級shell

工具 開發語言 結構 配置文件 格式 運行任務
Ansible Python YAML 支持命令行
SaltStack Python C/S YAML 支持命令行
Puppet Ruby C/S Ruby語法格式 經過模塊實現

Ansible
Ansible基於 Python開發,集合了衆多優秀運維工具的優勢,實現了批量運行命令
部署程序、配置系統等功能。默認經過SSH協議進行遠程命令執行或下發配置,無需
部署任何客戶端代理軟件,從而使得自動化環境部署變得更加簡單。可同時支持多臺
主機並行管理,使得管理主機更加便捷。
vim

官方的title是「Ansible is Simple IT Automation」——簡單的自動化IT工具。

Ansible經過SSH協議實現遠程節點和管理節點之間的通訊。理論上說,只要管理員經過ssh登陸到一臺遠程主機上能作的操做,Ansible均可以作到。

Ansible跟其餘IT自動化技術的區別在於其關注點並不是配置管理、應用部署或IT流程工做流,而是提供一個統一的界面來協調全部的IT自動化功能,所以Ansible的系統更加易用,部署更快。
Ansible可讓用戶避免編寫腳本或代碼來管理應用,同時還能搭建工做流實現IT任務的自動化執行。IT自動化能夠下降技術門檻及對傳統IT的依賴,從而加快項目的交付速度。
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰安全

Ansible基本架構由六個部分組成:

Ansible core 核心引擎
Host inventory 主機清單:用來定義Ansible 所管理的主機,默認是在Ansible的host配置文件中定義被管理主機,同時也支持自定義動態主機清單和指定其餘配置文件的位置。
Connection plugins鏈接插件:負責和被管理主機實現通訊。除支持使用ssh鏈接被管理主機外, Ansible還支持其餘的鏈接方式,因此須要有鏈接插件將各個主機用鏈接插件鏈接到 Ansible。
Playbooks(yaml, injaz2)劇本:用來集中定義 Ansible任務的配置文件,即將多個任務定義在一個劇本中由 Ansible自動執行,能夠由控制主機針對多臺被管理主機同時運行多個任務。
Core modules核心模塊:是 Ansible自帶的模塊,使用這些模塊將資源分發到被管理主機,使其執行特定任務或匹配特定的狀態。
Custom modules自定義模塊:用於完成模塊功能的補充,可藉助相關插件完成記錄日誌、發送郵件等功能。bash

-架構

ansible功能特性

  • 應用代碼自動化部署
  • 系統管理配置自動化
  • 支持持續交付自動化
  • 支持雲計算,大數據平臺環境
  • 輕量級,無序在客戶端安裝agent,更新時只需在控制機上進行更行便可
  • 批量任務執行能夠寫成腳本,不用分發到遠程就能夠執行
  • 支持非root用戶管理操做,支持sudo
  • 使用python編寫,維護更簡單

2、Ansible安裝

Ansible 自動化運維環境由控制主機與被管理主機組成,因爲Ansible是基於SSH協議進行通訊的,因此控制主機安裝Ansible軟件後不須要重啓或運行任何程序,被管理主機也不須要安裝和運行任何代理程序。運維

實驗安裝環境:

角色 主機名 IP地址 組名
控制主機 01 192.168.100.129
被管理主機 02 192.168.100.128 webserver
被管理主機 03 192.168.100.130 mysql

三臺主機關閉防火牆:

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0

安裝步驟:

控制主機安裝ansible並生成密鑰對批量發送給被管理主機

1.yum安裝環境包與ansible:

yum install epel-release -y
yum install ansible –y

2.查看ansible版本

[root@01 ~]# ansible  --version

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

3.yum安裝完成後會生成3個文件

[root@01 ~]# cd /etc/ansible/
[root@01 ansible]# ls

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

4.配置被管理端主機IP清單

[root@01 ansible]# vim /etc/ansible/hosts                     //配置主機清單

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

5.雖然ansible的配置文件已經設置完成被管理端的IP地址,可是由於ansible是基於ssh協議,因此還須要配置密鑰對驗證

[root@01 ~]# ssh-keygen -t rsa           //生成密鑰對

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

6.ssh協議免交互代理

[root@01 ~]# ssh-agent bash
[root@01 ~]# ssh-add

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

shell腳本批量發送公鑰

(1).下載安裝expect

[root@01 .ssh]# yum install expect -y                   //yum安裝expect

(2). ping通全部可互通的主機

[root@01 .ssh]# ansible all -m ping       //使用ansible中的ping模塊

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

ansible是基於SSH協議,因此能夠ping通的主機儲存在.ssh/known_hosts的文件當中。固然就算不ping通也能夠用shell腳本實現批量推送公鑰。

在最新版本ansible 2.7.0中,在沒有推送公鑰造成密鑰對的狀況下,沒法使用ping模塊ping通的狀況下,很難用authorized_key模塊去推送公鑰的。因此我更改了下shell腳本,這樣就能夠在沒法用ping模塊ping通的狀況下直接實現批量推送公鑰造成密鑰對。

[root@01 ~]# cd ~/.ssh/
[root@01 .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
[root@01 .ssh]# vim known_hosts                   //查看下已經記錄在SSH協議的主機,不作任何修改操做

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

(2).編寫shell腳本實現批量推送公鑰

[root@01 .ssh]# vim ~/.ssh/pushssh.sh

腳本以下:

#!/bin/sh
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
host1=`cat /etc/ansible/hosts | awk -F " " '{print $1}' | grep '^192'`
#在生產狀況中,有不少種得到IP的方法,本腳本最重要的就是得到IP地址,腳本只是提供一個思路。

for i in $host1;

do

command1="scp ~/.ssh/authorized_keys root@$i:~/.ssh/authorized_keys"

password="123123" 

/usr/bin/expect -c "
        spawn ssh-copy-id root@$i 
        expect {
        \"*password\" { send \"$password\r\"; exp_continue }
        }     
expect eof"

done

#編寫腳本完成後保存退出

[root@01 .ssh]# sh pushssh.sh        //執行腳本

PS:想要執行這個腳本,首先須要下載安裝expect,同時被管理端主機的密碼須要是一致的。

----------------------驗證-------------------

查看下腳本是否執行成功:

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰
自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

此時就能夠進行ansible批量部署操做

[root@01 ~]# ansible all -m command -a 'date'

自動化運維Ansible批量部署服務+shell腳本批量推送公鑰

相關文章
相關標籤/搜索