Ansible是一種運維自動化工具軟件,用來批量配置服務器或網絡設備(目標主機)。
一、概念理解
- Ansible如何來連接目標主機?
通過SSH協議進行連接,詳細參考:SSH協議
- 目標主機為何能相信Ansible,并接受其指令?
(1)Ansible知道目標主機密碼,并通過密碼訪問。
Ansible將密碼配置在以明文的形式配置在文件(也就是hosts文件),存在安全性問題。
(2)Ansible主機生成密鑰對,并將公鑰拷貝到目標主機。
通過ssh-copy-id命令進行拷貝,并修改~/.ssh的目錄權限。如:
ssh-copy-id -i /root/.ssh/id_rsa.pub root@30.0.1.43
當目標主機較多時,這種方法也比較受限。
(3)Ansible自動化安裝配置工具
Redhat下,通過Kickstart工具進行,可進行大批量的認證。
- Ansible如何知道需要連接哪些目標主機?
目標主機列表定義在/etc/ansible/hosts文件,稱為 "inventory" 。定義格式為:
[webservers]
30.0.1.234
30.0.1.154
- 目標主機上都有哪些事情需要做?
運維過程中,需要做的事情很多,如:
(1)基礎命令,如ls;
(2)定時任務,如crontab
(3)啟停服務,如service ngnix restart
(4)包管理,如apt install ansible
......
- Ansible如何知道做這些事(任務)的?
運維人員通過兩種方式來告知Ansible做事:
一種是我們熟悉的命令行方式,類似ansible webserver -m ping,稱之**“Ad-Hoc命令”**;
一種是通過YAML語法定義要執行的命令,稱為 “Playbook” 方式。
- Ansible又是如何具備做這些事的能力的?
Ansible通過 “Module” 來實現,如command、shell、copy等等。
- 運維人員如何知道Ansible提供了哪些Module?
查找Ansible提供的模塊
root@linux:/etc/ansible# ansible-doc -l
a10_server Manage A10 Networks AX/SoftAX/Thunder/vThunder devices' server object.
a10_server_axapi3 Manage A10 Networks AX/SoftAX/Thunder/vThunder devices
......
模塊的詳細信息
root@linux:/etc/ansible# ansible-doc -s ping
- name: Try to connect to host, verify a usable python and return `pong' on success
ping:
data: # Data to return for the `ping' return value. If this parameter is set to `crash' the
module will cause an exception.
- 如何讀懂PlayBook?
(1)了解YAML
PlayBook是通過YAML語法來實現的,詳情參考:《Yaml:數據的另一種形態》。
(2)清楚PlayBook有哪些關鍵字,如何來的?
--- #文件開始
- hosts: 30.0.1.43 #目標主機
remote_user: root #目標主機用戶
vars: #變量關鍵字
http_port: 8088 #定義變量
tasks: #任務關鍵字
- name: create new file #自定義任務
file: name=/tmp/playtest.txt state=touch #Module file,創建新文件
.......
handlers: #處理關鍵字
- name: restart apache #自定義處理名稱
service: name=httpd state=restarted #重啟服務
說明:file、service都是module名字。
二、Ansible小示例
基礎環境:Ubuntu18.04 LTS
- 安裝ansible軟件
root@linux:/# apt install ansible
......
root@linux:/# apt install sshpass
查看ansible版本信息:
root@linux:/etc/ansible# ansible --version
ansible 2.5.1
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.17 (default, Sep 30 2020, 13:38:04) [GCC 7.5.0]
已生成ansible.cfg、hosts文件
root@linux:/etc/ansible# ls
ansible.cfg hosts
- Ansible連通目標主機
(1)目標主機有兩臺,IP地址分別為:30.0.1.234、30.0.1.154
(2)配置hosts文件
root@linux:/etc/ansible# vi hosts
[webservers]
30.0.1.234
30.0.1.154
(3)執行ping操作,測試連接
root@linux:~# ansible webservers -m ping
The authenticity of host '30.0.1.154 (30.0.1.154)' can't be established.
ECDSA key fingerprint is SHA256:THHVZ1IfwqJk0YpV7Qk/a+ZvMds4phRQJEbrJIJFagg.
Are you sure you want to continue connecting (yes/no)? The authenticity of host '30.0.1.234 (30.0.1.234)' can't be established.
ECDSA key fingerprint is SHA256:THHVZ1IfwqJk0YpV7Qk/a+ZvMds4phRQJEbrJIJFagg.
Are you sure you want to continue connecting (yes/no)? yes
30.0.1.154 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Warning: Permanently added '30.0.1.154' (ECDSA) to the list of known hosts.\\r\\nroot@30.0.1.154: Permission denied (publickey,password).\\r\\n",
"unreachable": true
}
30.0.1.234 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Host key verification failed.\\r\\n",
"unreachable": true
}
連接失敗
(4)修改ansible.cfg配置文件,不進行host_key的校驗
root@linux:~# vi /etc/ansible/ansible.cfg
# uncomment this to disable SSH key host checking
host_key_checking = False
root@linux:/etc/ansible# ansible webservers -m ping
30.0.1.154 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: root@30.0.1.154: Permission denied (publickey,password).\\r\\n",
"unreachable": true
}
30.0.1.234 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Warning: Permanently added '30.0.1.234' (ECDSA) to the list of known hosts.\\r\\nroot@30.0.1.234: Permission denied (publickey,password).\\r\\n",
"unreachable": true
}
依然無法連接到目標主機,root用戶不允許進行遠程登錄
(5)修改hosts文件
root@linux:/etc/ansible# vi hosts
[webservers]
30.0.1.234
30.0.1.154
[webservers:vars]
ansible_ssh_user=linux
ansible_ssh_pass=user@linux
ansible_become=true
ansible_become_method=su
ansible_become_user=root
ansible_become_pass=root@linux
上面配置語句的含義為:以linux用戶登錄,然后再提高權限,切換到root用戶。
(6)再次測試,連接成功
root@linux:/etc/ansible# ansible webservers -m ping
30.0.1.234 | SUCCESS => {
"changed": false,
"ping": "pong"
}
30.0.1.154 | SUCCESS => {
"changed": false,
"ping": "pong"
}
"pong" 表示ping成功,連接成功
-
服務器
+關注
關注
12文章
9123瀏覽量
85324 -
自動化
+關注
關注
29文章
5562瀏覽量
79239 -
網絡設備
+關注
關注
0文章
315瀏覽量
29636 -
工具軟件
+關注
關注
1文章
16瀏覽量
6890
發布評論請先 登錄
相關推薦
評論