2019-04-23 ansible

1.ssh-keygen非交互式創(chuàng)建秘鑰對(duì):

具體命令:ssh-keygen -f ~/.ssh/id_rsa? -P '' -q

參數(shù)講解:

ssh-keygen:密鑰對(duì)創(chuàng)建工具

[-P old_passphrase]? 密碼

[-f output_keyfile]? 輸出的秘鑰文件

[-q]? ? ? 不輸出信息? ? ?

[-t dsa ]? 指定秘鑰類型。

2.ssh-copy-id不需要提示yes/no分發(fā)秘鑰

具體命令:ssh-copy-id -f -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no 172.16.1.8

參數(shù)講解:

ssh-copy-id? -f? -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no root172.16.1.8

ssh-copy-id [-f] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname

說(shuō)明:

-f: force mode 強(qiáng)制

[-i [identity_file]] 指定秘鑰文件

[[-o <ssh -o options>] ...] 指定ssh參數(shù)選項(xiàng)。

3.sshpass工具:指定密碼非人工交互分發(fā)秘鑰

sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7

[root@web02 ~]# sshpass -help

Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters

sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7

sshpass [-f|-d|-p|-e] [-hV] command parameters

參數(shù)講解:

-p password? Provide password as argument (security unwise)? ? #指定用戶密碼操作

4.一鍵配置實(shí)踐

手動(dòng)配置

ssh-keygen -f ~/.ssh/id_rsa? -P '' -q

ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7

sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.7

腳本自動(dòng)分發(fā)

#!/bin/bash

#yum install sshpass -y

ssh-keygen -f ~/.ssh/id_rsa? -P '' -q

for ip in 7 61

do

? sshpass -p123456 ssh-copy-id -f -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.$ip

done

#test

ssh 172.16.1.7 "ifconfig eth0"

ssh 172.16.1.61 "ifconfig eth0"


1.ansible介紹

ssh秘鑰認(rèn)證+腳本批量管理,特點(diǎn):簡(jiǎn)單、實(shí)用,

但是看起來(lái)比較LOW,需要人工寫腳本,類似實(shí)時(shí)復(fù)制的inotify工具。

2013以前這種方式很普遍。

MySQL高可用 MHA集群,要求所有機(jī)器互相秘鑰認(rèn)證。

大數(shù)據(jù)集群也需要。

2.批量管理工具歷史

SSH+腳本 CFEngine、Puppet、saltstack? 、ansible

3.為什么用ansible?

簡(jiǎn)單、方便、容易學(xué)習(xí)、功能同樣強(qiáng)大。

ansible有配置文件,可以多線程直接實(shí)現(xiàn)。不需要寫腳本,類似實(shí)時(shí)復(fù)制的sersync。

4.什么是ansible?

Ansible是一個(gè)用來(lái)遠(yuǎn)程管理服務(wù)器的工具軟件。

Ansible是一個(gè)用來(lái)批量部署遠(yuǎn)程主機(jī)上服務(wù)的工具。這里“遠(yuǎn)程主機(jī)(Remote Host)”是指任

何可以通過(guò)SSH登錄的主機(jī),所以它既可以是遠(yuǎn)程虛擬機(jī)或物理機(jī),也可以是本地主機(jī)。

Ansible通過(guò)SSH協(xié)議實(shí)現(xiàn)管理節(jié)點(diǎn)與遠(yuǎn)程節(jié)點(diǎn)之間的通信。理論上來(lái)說(shuō),只要能通過(guò)SSH登錄到

遠(yuǎn)程主機(jī)來(lái)完成的操作,都可以通過(guò)Ansible實(shí)現(xiàn)批量自動(dòng)化操作。

涉及管理操作:復(fù)制文件、安裝服務(wù)、服務(wù)啟動(dòng)停止管理、配置管理等等。

5.為什么要用批量管理工具運(yùn)維?

提高效率,百度幾萬(wàn)臺(tái)服務(wù)器,阿里幾十萬(wàn)臺(tái)服務(wù)器。

如何省錢?

SSD+SATA 熱點(diǎn)存儲(chǔ) 15 15 7


6.Ansible特點(diǎn)

Ansible基于Python語(yǔ)言實(shí)現(xiàn),由Paramiko和PyYAML兩個(gè)關(guān)鍵模塊構(gòu)建。

Shell、Python是Linux運(yùn)維學(xué)員必會(huì)的兩門語(yǔ)言。

1)安裝部署過(guò)程特別簡(jiǎn)單,學(xué)習(xí)曲線很平坦。

2)不需要單獨(dú)安裝客戶端,只是利用現(xiàn)有的SSHD服務(wù)(協(xié)議)即可。

3)不需要服務(wù)端(no servers)。

4)ansible playbook,采用yaml配置,提前編排自動(dòng)化任務(wù)。

5)ansible功能模塊較多,對(duì)于自動(dòng)化的場(chǎng)景支持豐富。


7.Ansible架構(gòu)介紹(見(jiàn)圖說(shuō)明)

1、連接插件connectior plugins用于連接主機(jī) 用來(lái)連接被管理端

2、核心模塊 core modules 連接主機(jī)實(shí)現(xiàn)操作, 它依賴于具體的模塊來(lái)做具體的事情

3、自定義模塊 custom modules,根據(jù)自己的需求編寫具體的模塊

4、插件 plugins,完成模塊功能的補(bǔ)充

5、劇本 playbooks,ansible的配置文件,將多個(gè)任務(wù)定義在劇本中,由ansible自動(dòng)執(zhí)行

6、主機(jī)清單 inventor,定義ansible需要操作主機(jī)的范圍

最重要的一點(diǎn)是 ansible是模塊化的 它所有的操作都依賴于模塊


8.ansible實(shí)踐環(huán)境準(zhǔn)備

m01管理機(jī):

yum install epel-release -y

yum install ansible -y

#如果有l(wèi)ibselinux-python就不執(zhí)行下面的命令了。

#rpm -qa |grep libselinux-python

#yum install libselinux-python -y

其他所有機(jī)器:

#rpm -qa |grep libselinux-python

#yum install libselinux-python -y

10.主機(jī)列表配置

/etc/ansible/hosts主機(jī)資產(chǎn)清單文件,用于定義被管理主機(jī)的認(rèn)證信息,

例如ssh登錄用戶名、密碼以及key相關(guān)信息。如何配置Inventory文件

1.主機(jī)支持主機(jī)名通配以及正則表達(dá)式,例如web[1:3].oldboy.com代表三臺(tái)主機(jī)

2.主機(jī)支持基于非標(biāo)準(zhǔn)的ssh端口,例如web1.oldboyedu.com:6666

3.主機(jī)支持指定變量,可對(duì)個(gè)別主機(jī)的特殊配置,如登陸用戶\密碼

4.主機(jī)組支持指定變量[group_name:vars],同時(shí)支持嵌套組[game:children]


基于SSH秘鑰認(rèn)證的前提下:

如果沒(méi)有做SSH秘鑰認(rèn)證,可以把用戶名密碼寫到

/etc/ansible/hosts

[oldboy_pass]

172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456

172.16.1.8 ansible_ssh_user=root ansible_ssh_pass=123456

ansible oldboy -m command -a "free -m" 要想成功,先解決yes/no的問(wèn)題。

1、ssh連接一遍。

2、ssh -o 參數(shù)

上述命令就是sshpass的封裝

==========================================

ansible關(guān)閉ssh首次連接時(shí)yes/no提示

使用ssh連接時(shí),可以使用-o參數(shù)將StrictHostKeyChecking設(shè)置為no,

避免使用ssh連接時(shí)避免首次連接時(shí)讓輸入yes/no部分的提示。

方法1:修改 /etc/ansible/ansible.cfg中的374行

374 #ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s

374行改為:

ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no

方法2:修改 /etc/ansible/ansible.cfg中的71行

70 # uncomment this to disable SSH key host checking

71 #host_key_checking = False

71行的注釋取消:host_key_checking = False

==========================================


11.ansible命令參數(shù)

-m MODULE_NAME, 模塊名字,默認(rèn)command

-a MODULE_ARGS, 模塊參數(shù)

-f FORKS ? ? 并發(fā)進(jìn)程數(shù),默認(rèn)5個(gè)。

-i INVENTORY(default=/etc/ansible/hosts)指定主機(jī)列表文件

===================

ansible

ansible-doc

ansible-playbook

ansible-galaxy

===================

12.ansible模塊查看和幫助*****

查找模塊

ansible-doc -l? ? ? ? ? #模塊就Linux命令了。

查看某個(gè)模塊的具體參數(shù)幫助

ansible-doc -s command? #Linux命令參數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容