Ansible 簡單使用

關於

系統管理員常常須要作一些重複的工做,如系統初始化、軟件升級、修改配置、部署應用、重啓服務、執行命令等。咱們能夠經過腳原本完成這些工做,例如使 Fabric。但當系統規模較大時,腳本就顯得比較乏力,配置管理工具 SaltStack、Ansible 等的優勢顯現出來。配置管理的特色是經過配置來管理遠程服務器,並非腳本。shell

Ansible 是配置管理和應用部署工具,默認經過 ssh 協議管理服務器,在管理主機上執行命令就能夠在各節上執行相應的動做,而 Saltstack、Puppet、Chef 等須要在每一個設備上安裝特定的軟件。安全

Ansible 的目的:bash

  • 應用部署
  • 管理配置
  • 回滾更新 等

Ansible 的特色:服務器

  • 無需在部署主機上安裝任何代理
  • 協調應用程序生命週期
  • 任務按順序執行
  • 支持 API 及自定義模塊,可鬆擴展
  • 經過 Playbooks 來定製管理
  • 基於模塊,具備高度的複用性
  • 可以和當前主流雲計算平臺、容器工具完美結合

安裝

推薦 pip:ssh

pip install ansible
複製代碼

配置

Ansible 的配置文件的查找順序以下:工具

  1. 環境變量 ANSIBLE_CONFIG
  2. 當前目錄下的 ansible.cfg
  3. home 目錄下的 ~/.ansible.cfg
  4. /etc/ansible/ansible.cfg

Ansible 使用找到的第一個文件,忽略其他的。ui

配置文件是 INI 格式文件的變種,#; 均可以用做註釋符,但註釋所在的行有正規的值時,只能使用 ;雲計算

# some basic default values...
inventory = /etc/ansible/hosts  ; This points to the file that lists your hosts
複製代碼

出於安全的考慮, ansible.vfg 所在的當前目錄是 world-writable 的話,Ansible 將不會自動加載文件,解決方法是將此目錄的進入權限限定爲特定的用戶或組。若是系統不能使用 chmodchownchgrp,最好的解決方法修改文件系統的掛載選項,使目錄對運行 ansible 的用戶讀寫,對其餘用戶關閉。spa

使 ansible-config view 查看配置。命令行

使用前

Ansible 遠程通訊默認使用原生的 OpenSSH,可是當管理節點是 Enterprise Linux 6(如 RHELCentOS),Openssh 的版太老,Ansible 會使用 OpenSSHPython 實現:paramiko。若是您想使用 SSH 的新特性,使用 FedoraMacOSUbuntu 做爲控制節點。

可能有些設備不支持 SFTP,能夠在配置文件中切換爲 SCP 模式。

ssh keys

Ansibe 默認使用 SSH keys 和遠程主機通訊,雖然推薦使用 ssh keys,但當提供 --ask-pass 參數時也能夠使口令認證。若是想用 sudo,需提供 --ask-become-pass(以前的 --ask-sudo-pass 再也不推薦)。

Linux 無密鑰登陸:

  1. 在管理節點生成密鑰對

    ssh-keygen -t rsa
    複製代碼
  2. 發送公鑰

    ssh-copy-id user@host
    複製代碼

    ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
    複製代碼
  3. 也能夠設置遠程主機拒絕密碼驗證

    # vi /etc/ssh/sshd_config
    PasswordAuthentication no
    複製代碼

    PubkeyAuthentication yes

  4. 若是執行第三步,需重啓 sshd

    systemctl restart sshd
    複製代碼

ssh-agent

Ansible does not expose a channel to allow communication between the user and the ssh process to accept a password manually to decrypt an ssh key when using the ssh connection plugin (which is the default). The use of ssh-agent is highly recommended.

ssh-agent 是 ssh 的代理程序,能夠幫助咱們管理私鑰。當遇到以下狀況時,咱們會須要 ssh-agent

  • 使用不一樣的密鑰鏈接不一樣的主機,需手動指定對應的密鑰,使用 ssh-agent 能夠幫助咱們選擇對應的密鑰進行認證,再也不需手動指定。
  • 當私鑰設置密碼,每次使用時都要輸入密碼,ssh-agent 能夠免去重輸入密碼的操做。

固然,很多系統默認都已經啓動,並且生成的密鑰也自動加入代理,因此下面的步驟不須要操做。

  1. 啓動 ssh-agent:

    ssh-agent $SHELL  # 會啓動一個子shell,運行在子shell中,會隨着 ssh 會話的消失而消失,這是一種安全機制
    eval `ssh-agent`  # 不會啓動子shell
    複製代碼
  2. 關閉 ssh-agent:

    ssh-agent -k $SSH_AGENT_PID
    複製代碼
  3. 添加私鑰

    ssh-add ~/.ssh/id_rsa
    複製代碼
  4. 查看代理中的私鑰

    ssh-add -l
    複製代碼
  5. 查看代理中的私鑰對應的公鑰

    ssh-add -L
    複製代碼
  6. 刪除指定私鑰

    ssh-add -d /path/key/key_name
    複製代碼
  7. 刪除全部代理的私鑰

    ssh-add -D
    複製代碼
  8. 鎖定 ssh 代理

    ssh-add -x
    複製代碼
  9. 解鎖 ssh 代理

    ssh-add -X
    複製代碼

開始使用

編輯 ansible.cfg 中的 inventory 指定的文件,默認 /etc/ansible/hosts

[test]
10.53.141.252 ansible_user=cec
複製代碼

命令行執行命令

$ ansible all -m ping
10.53.141.252 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

$ ansible all -a ifconfig
10.53.141.252 | CHANGED | rc=0 >>
enp2s0    Link encap:以太網  硬件地址 8c:ec:4b:51:cc:6d  
          inet 地址:10.53.141.252  廣播:10.53.143.255  掩碼:255.255.252.0
。。。。。。
複製代碼
相關文章
相關標籤/搜索