1. 程式人生 > >ansible--安裝,命令格式, ssh, command, shell, script, copy

ansible--安裝,命令格式, ssh, command, shell, script, copy

web 文件的權限 控制 覆蓋 nta sta fstab ins 屬組

ansible

是一個基於python開發的自動化運維工具,可以實現批量系統配置,批量程序部署,批量運行命令

需要管控機和被管控機的時間同步一致, 配置相同的時間服務器即可

一.安裝

1.安裝wget

需要用到wget命令,如果系統是最小化安裝的,那麽可能需要先安裝wget

yum install -y wget

2.將epel源安裝下載到本地

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
3.安裝ansible
yum install -y ansible

成功之後可查看生成的文件

rpm -ql ansible|more

# 其中
/etc/ansible/ansible.cfg #配置文件
/etc/ansible/roles #空文件夾

二.命令格式

ansible -h # 查看命令格式

Usage: ansible <host-pattern> [options]
Options:
    -a MODULE_ARGS, #模塊參數
    -C, --check # 嘗試執行,但是不做任何改變
    -f FORKS, --forks=FORKS #指定並發,默認5個
    --list-hosts #列出主機
    -m MODULE_NAME# 模塊名稱
    --syntax-check #檢查語法
    -k #密碼

ping命令用到的協議是ICMP,ansible底層是用ssh來實現的

? ICMP協議是一種面向無連接的協議,用於傳輸出錯報告控制信息。它是一個非常重要的協議,它對於網絡安全具有極其重要的意義。它是TCP/IP協議族的一個子協議,屬於網絡層協議,主要用於在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態信息等。當遇到IP數據無法訪問目標、IP路由器無法按當前的傳輸速率轉發數據包等情況時,會自動發送ICMP消息。ICMP報文在IP幀結構的首部協議類型字段(Protocol 8bit)的值=1.

要先配置/etc/ansible/hosts

vi /etc/ansible/hosts

## www[001:006].example.com  代表 www001-www006(包含)

技術分享圖片

1.ansible的ping

可用來探測某幾臺機器是否在線

ansible 192.168.226.101 -m ping #單獨機器的ping
ansible 192.168.226.101,192.168.226.102 -m ping #多個機器的ping
ansible all -m ping #全部機器
ansible web -m ping #單個的組
ansible web,db -m ping #多個組的並集
ansible 'web:&db' -m ping #多個組的交集
ansible 'web:!db' -m ping #多個組的差集,在前面但是不在後面

可能會出現的問題

1.沒有在/etc/ansible/hosts文件中配置被管控機的ip

技術分享圖片

2.要用命令ansible?192.168.227.146 -m?ping?-k見下面ssh

技術分享圖片

成功後提示:

技術分享圖片

2.ssh

1.生成ssh密鑰公鑰對

ssh-keygen

2.連接到目標,之後就可通過ssh來連接了

ssh-copy-id [email protected]

3.host-pattern

  • 單個的ip地址
  • 多個的ip地址,用,分割
  • 單個組
  • 多個組
    • 並集 web,db? 或者 ‘web:db’
    • 交集 ‘web:&db’
    • 差集 ‘web:!db’
  • 全部 all表示

4.ansible-doc

ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
        -j #以json的方式返回數據
        -l, --list #列出所有的模塊
        -s, --snippet #以片段式顯示模塊信息
        #直接查看完整信息

查看這些命令詳細信息

ansible-doc -h

三.command

ansible web -m command -a "pwd"
ansible web -m command -a "ls"
ansible web -m command -a "chdir=/tmp pwd" #切換目錄並執行命令
ansible web -m command -a "creates=/tmp pwd" #因為tmp目錄存在,pwd不會執行
ansible web -m command -a "creates=/tmp2 pwd" #因為tmp2不存在,pwd執行
ansible web -m command -a "removes=/tmp2 pwd" #因為tmp2不存在pwd不執行
ansible web -m command -a "removes=/tmp pwd" #因為tmp目錄存在,pwd會執行
echo "1234" |passwd --stdin alex #設置用戶的密碼

四.shell 支持特殊字符 <>|&$;

linux中的文件頭

python文件頭
#!/usr/bin/env python
# -*- coding:utf-8 -*-

shell腳本文件頭
#!/bin/bash

命令:

ansible web -m shell -a "echo '1234' |passwd --stdin alex"
ansible web -m shell -a "chdir=/tmp pwd" shabang
ansible 192.168.226.101 -m shell -a "bash a.sh" #執行shell腳本
ansible 192.168.226.101 -m shell -a "/root/a.sh" # 執行shell腳本,文件要有執行的權限
ansible 192.168.226.101 -m shell -a "/root/a.py" #執行Python文件

五.script 執行本地的腳本

ansible db -m script -a "/root/a.sh" #執行本地的文件,管控機的文件
ansible db -m script -a "creates=/root/a.sh /root/a.sh" # 判斷被控機上的文件是否存在,如果不存在,就執行,如果存在,就跳過
ansible db -m script -a "creates=/tmp /root/a.sh" #判斷被控機上的文件

六.copy

backup #創建一個備份文件,以時間戳結尾
content #直接往文件裏面寫內容
dest #目標地址
group #屬組
mode# 文件的權限 
owner #屬主
src #源地址 直接寫目錄,則復制整個目錄,如果目錄後面以/結尾,則復制的目錄下的所有文件
owner # 屬主
group # 屬組
mode # 權限

ansible web -m copy -a "src=/etc/fstab dest=/tmp/f" #復制本地文件到遠程主機,並修改文件名,多次執行不會改變,因為checksum值是一樣的
ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes" #復制本地文件,並備份
ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes group=alex mode=755"# 復制本地文件到遠程主機,並指定屬組和權限
ansible web -m copy -a "src=/etc/init.d dest=/tmp backup=yes group=alex mode=755" #復制本地的目錄到遠程主機,修改目錄權限,則目錄裏面的文件也會跟著變更
ansible web -m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=alex mode=755" #復制本地目錄下的所有文件,
ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私語,嘈嘈切切錯 雜彈,大珠小珠落玉盤' dest=/tmp/b" #直接往文件裏面寫內容,覆蓋寫,慎用

ansible--安裝,命令格式, ssh, command, shell, script, copy