Ansible安裝及初始化-從零到無
--時間:2019年1月12日
--作者:飛翔的小胖豬
前言
說明
文件指導讀者在Redhat系列作業系統上安裝Ansible軟體及初始化配置,包括服務端及被控端的配置檔案設定。
以下所有操作都在Ansible伺服器端操作,客戶端不做任何配置。
環境
作業系統:CentOS Linux release 7.6.1810 (Core) 最小安裝
資料庫:mariadb-5.5.56-2.el7.x86_64
程式設計軟體:Python 3.6.4
配置
思路步驟
文件撰寫流程及思路如下。
1.安裝ansible+python+mariadb軟體
2.配置ansible服務端,取消ssh登入敲yes等引數
3.生成root的公私鑰對。
4.下發私鑰至客戶端伺服器。
5.編輯配置ansible主機清單檔案。
6.測試配置是否成功
1.安裝軟體
安裝ansible、python、mysql軟體。 [root@ansible-el7 ~]# yum install mariadb* -y [root@ansible-el7 ~]# mysql_secure_installation [root@ansible-el7 ~]# mysql -uroot -pyinwan [root@ansible-el7 ~]# tar -zxvf Python-3.6.4.tgz [root@ansible-el7 ~]# cd Python-3.6.4/ [root@ansible-el7 ~]# ./configure --prefix=/opt/python3 [root@ansible-el7 ~]# mkdir /opt/python3 [root@ansible-el7 ~]# /opt/python3/bin/pip3 install --no-index --find-link /myfile/lvan/soft -r /myfile/lvan/soft/filename.txt [root@ansible-el7 ~]# yum install MySQL-python -y [root@ansible-el7 ~]# yum localinstall ./ansible-2.4.2.0-2.el7.noarch.rpm -y
2.配置ansble服務端
配置首次通過ssh協議登入被控主機時不用敲yes。ssh在登入伺服器時會提示敲一個yes。 [root@ansible-el7 ~]# vim /etc/ansible/ansible.cfg host_key_checking = False
配置ansible伺服器在連線客戶端時指定金鑰對及一些基本配置。
[root@ansible-el7 ~]# vim /etc/ssh/ssh_config
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no
GSSAPIAuthentication no
UseDNS no
配置ansible伺服器sshd服務端配置。
[root@ansible-el7 ~]# vim /etc/ssh/sshd_config
GSSAPIAuthentication no
UseDNS no
重啟sshd服務
[root@ansible-el7 ~]# systemctl restart sshd
3.生成金鑰對
[root@ansible-el7 ~]# ssh-keygen -t rsa
[root@ansible-el7 ~]# ll /root/.ssh/
4.下發公鑰至客戶端
如果ansible主機清單使用明文密碼則不用執行該步驟,直接跳至第5步。
下發公鑰文件提供了兩種方式,任選其一即可,一般情況下10臺及以下的主機推薦使用單主機模式下發,在大規模的環境下使用指令碼方式下發。
*---------------------------------------------------------------------------------*
單主機下發:
只需要通過命令下發公鑰到指定主機中,首次需要手動輸入遠端主機對應使用者密碼。然後測試下是否能夠在公鑰傳輸後不用密碼登入遠端主機。
使用單條命令下發rsa檔案到指定主機中
[root@ansible-el7 ~]# ssh-copy-id -i /root/.ssh/id_rsa root@192.168.111.30
把指定的/root/.ssh/id_rsa.rsa檔案複製到192.168.111.30的/root/.ssh/authorized_key檔案中
測試直接使用金鑰對登入客戶端系統。
[root@ansible-el7 ~]# ssh -i /root/.ssh/id_rsa root@192.168.111.30
指定使用/root/.ssh/id_rsa.rsa公鑰檔案連線遠端主機192.168.111.30
*---------------------------------------------------------------------------------*
*—————————————————————————————*
批量下發:
在批量主機下發時,需要準備一個寫有需要控制的主機的ip地址和使用者名稱及密碼的檔案,每個列資料間用“空格隔開”,然後編寫一個指令碼一行一行讀取檔案中的資料,進行檔案下發操作。
使用主機表+shell指令碼的方式下發rsa(僅限linux)
[root@ansible-el7 ~]#cat hostname_auto_ssh.txt 192.168.111.30 root yinwan 192.168.111.31 root yinwan 192.168.111.33 root yinwan 192.168.111.63 root yinwan
[root@ansible-el7 ~]#vim auto_ssh.sh #!/bin/bash cat hostname_auto_ssh.txt | while read ipaddr root passwd do #執行把rsa檔案拷貝到指定主機中 jieguo=`sshpass -p $passwd /usr/bin/ssh-copy-id -i /root/.ssh/id_rsa.rsa $root@$ipaddr` if [ $? -eq 0 ];then #判斷如果命令成功則把ip資訊傳入到成功日誌中 echo "$ipaddr succeed" >> succeed_copy.log else #判斷如果命令失敗則把ip資訊傳入到失敗日誌中 echo "$ipaddr failed copying" >> failed_copy.log fi done
[root@ansible-el7 ~]#./auto_ssh.sh
如果有臺被管節點重新安裝系統並且在known_hosts中有了與之前不同的金鑰資訊,就會提示一個金鑰資訊不匹配的錯誤資訊,直到被糾正為止。在使用Ansible時,如果有臺被管節點沒有在known_hosts中被初始化,將會在使用Ansible或定時執行Ansible時提示對key資訊的確認。
如果不想出現這種情況,並且明白禁用此項行為的含義,只需要修改home目錄下
~/.ansible.cfg 或 /etc/ansible/ansible.cfg 的配置選項。
[root@ansible-el7 ~]# vim /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False
或者直接在控制主機的作業系統中設定環境變數,如下所示:
[root@ansible-el7 ~]#export ANSIBLE_HOST_KEY_CHECKING=False
*—————————————————————————————*
5.編輯主機清單
文件提供兩種方式設定主機清單,推薦使用金鑰對的方式新增主機清單,採用明文密碼的時候不用執行第4步操作。
*---------------------------------------------------------------------------------*
使用名文密碼案例:
使用明文密碼填寫到ansible檔案密碼對任何人都可見,中存在較大的風險。
[root@ansible-el7 ~]#vim /etc/ansbile/hosts [rhel] rhel7_5 ansible_ssh_host=192.168.111.33 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_pass='yinwan' rhel6_5 ansible_ssh_host=192.168.111.63 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_pass='yinwan' [suse] Suse11_Sp3 ansible_ssh_host=192.168.111.31 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_pass='yinwan' [ubuntu] Ubuntu16_4 ansible_ssh_host=192.168.111.30 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_pass='yinwan'
*---------------------------------------------------------------------------------*
*—————————————————————————————*
使用公鑰案例:
使用公鑰填寫到ansible檔案中,可以減少主機密碼外洩的風險。
優點:防止密碼洩露,客戶端修改密碼後不會影響訪問。
缺點:風險很大,ansible服務端一旦成為肉雞會影響所有被控客戶端。
[root@ansible-el7 ~]#vim /etc/ansbile/hosts [rhel] rhel7_5 ansible_ssh_host=192.168.111.33 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_private_key_file=/root/.ssh/id_rsa.rsa rhel6_5 ansible_ssh_host=192.168.111.63 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_private_key_file=/root/.ssh/id_rsa.rsa [suse] Suse11_Sp3 ansible_ssh_host=192.168.111.31 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_private_key_file=/root/.ssh/id_rsa.rsa [ubuntu] Ubuntu16_4 ansible_ssh_host=192.168.111.30 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_private_key_file=/root/.ssh/id_rsa.rsa
*—————————————————————————————*
6.測試
測試ansible配置是否正常。
在hosts配置檔案中未設定rsa時,客戶主機已經傳過rsa檔案的情況下可以使用。 [root@ansible-el7 ~]#ansible all --private-key=/root/.ssh/id_rsa.rsa -f 10 -t /ansible/ansible_log -m ping
指定rsa檔案在/root/.ssh/id_rsa.rsa位置,執行緒為10,儲存的日誌檔案在/ansible/ansible_log,使用ping模組。
當在/etc/ssh/ssh_config中指定了rsa檔案路徑過後使用,則不需要指定--private-key=引數。
[root@ansible-el7 ~]#ansible all -f 20 -t /ansible/ansible_log -m ping