系統管理員常常須要作一些重複的工做,如系統初始化、軟件升級、修改配置、部署應用、重啓服務、執行命令等。咱們能夠經過腳原本完成這些工做,例如使 Fabric。但當系統規模較大時,腳本就顯得比較乏力,配置管理工具 SaltStack、Ansible 等的優勢顯現出來。配置管理的特色是經過配置來管理遠程服務器,並非腳本。shell
Ansible 是配置管理和應用部署工具,默認經過 ssh 協議管理服務器,在管理主機上執行命令就能夠在各節上執行相應的動做,而 Saltstack、Puppet、Chef 等須要在每一個設備上安裝特定的軟件。安全
Ansible 的目的:bash
Ansible 的特色:服務器
推薦 pip:ssh
pip install ansible
複製代碼
Ansible 的配置文件的查找順序以下:工具
ANSIBLE_CONFIG
ansible.cfg
~/.ansible.cfg
/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 將不會自動加載文件,解決方法是將此目錄的進入權限限定爲特定的用戶或組。若是系統不能使用chmod
、chown
、chgrp
,最好的解決方法修改文件系統的掛載選項,使目錄對運行 ansible 的用戶讀寫,對其餘用戶關閉。spa
使 ansible-config view
查看配置。命令行
Ansible
遠程通訊默認使用原生的 OpenSSH
,可是當管理節點是 Enterprise Linux 6
(如 RHEL
和 CentOS
),Openssh
的版太老,Ansible
會使用 OpenSSH
的 Python
實現:paramiko
。若是您想使用 SSH
的新特性,使用 Fedora
、MacOS
或 Ubuntu
做爲控制節點。
可能有些設備不支持
SFTP
,能夠在配置文件中切換爲SCP
模式。
Ansibe 默認使用 SSH keys 和遠程主機通訊,雖然推薦使用 ssh keys,但當提供 --ask-pass
參數時也能夠使口令認證。若是想用 sudo
,需提供 --ask-become-pass
(以前的 --ask-sudo-pass
再也不推薦)。
Linux
無密鑰登陸:
在管理節點生成密鑰對
ssh-keygen -t rsa
複製代碼
發送公鑰
ssh-copy-id user@host
複製代碼
或
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
複製代碼
也能夠設置遠程主機拒絕密碼驗證
# vi /etc/ssh/sshd_config
PasswordAuthentication no
複製代碼
PubkeyAuthentication yes
若是執行第三步,需重啓 sshd
systemctl restart sshd
複製代碼
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
能夠免去重輸入密碼的操做。固然,很多系統默認都已經啓動,並且生成的密鑰也自動加入代理,因此下面的步驟不須要操做。
啓動 ssh-agent
:
ssh-agent $SHELL # 會啓動一個子shell,運行在子shell中,會隨着 ssh 會話的消失而消失,這是一種安全機制
eval `ssh-agent` # 不會啓動子shell
複製代碼
關閉 ssh-agent
:
ssh-agent -k $SSH_AGENT_PID
複製代碼
添加私鑰
ssh-add ~/.ssh/id_rsa
複製代碼
查看代理中的私鑰
ssh-add -l
複製代碼
查看代理中的私鑰對應的公鑰
ssh-add -L
複製代碼
刪除指定私鑰
ssh-add -d /path/key/key_name
複製代碼
刪除全部代理的私鑰
ssh-add -D
複製代碼
鎖定 ssh 代理
ssh-add -x
複製代碼
解鎖 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
。。。。。。
複製代碼