【原創】Centos8使用ansible


目錄

  • 使用ansible發布公鑰
  • ansible基本命令
  • ansbile配置文件詳解

一、使用ansible發布公鑰

1.0 生成秘鑰對

1、生成命令

ssh-keygen -t rsa

# 推送單個公鑰到遠程機器
ssh-copy-id -i ~/.ssh/id_rsa.pub username@<IP>

  

2、驗證

ll .ssh/
total 8
-rw-------. 1 root root 2610 Feb  4 01:20 id_rsa
-rw-r--r--. 1 root root  580 Feb  4 01:20 id_rsa.pub

  

1.1 添加ansible host

1、編輯/etc/ansible/hosts,沒有則創建些文件。

格式:【主機名】 【主機地址】 【主機密碼】 默認是root用戶來進行的

[sync-ssh-key-servers]
192.168.10.52 ansible_ssh_user=root ansible_ssh_pass=1q2w3e4r

  

2、編輯/etc/ansible/ansible.cfg, 打開host_key_checking = False選項

[defaults]
host_key_checking = False

  

1.2 書寫ansible-playbook

1、編寫push.ssh.ymal

# cat /etc/ansible/roles/push.ssh.ymal
- hosts: sync-ssh-key-servers(hosts定義)
  user: root (互信用戶)
  tasks:
  - name: ssh-copy
    authorized_key: user=root key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
    tags:
      - sshkey

  

2、驗證ansible-playbook是否ok

# 執行命令
# ansible-playbook /etc/ansible/roles/push.ssh.ymal -f 10 (並發數) [DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details PLAY [sync-ssh-key-servers] ************************************************************************************************************************************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************************************************* ok: [192.168.10.52] TASK [ssh-copy] ************************************************************************************************************************************************************************************************************************************************************** changed: [192.168.10.52] PLAY RECAP ******************************************************************************************************************************************************************************************************************************************************************* 192.168.10.52 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

  

1.3命令驗證是否ssh-key執行成功

#  ansible all -a date
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be 
disabled by setting deprecation_warnings=False in ansible.cfg.
 [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details

192.168.10.52 | CHANGED | rc=0 >>
Tue Feb  4 02:05:52 EST 2020

# ansible all -m ping
[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details

192.168.10.52 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}

  

二 ansible基本命令

2.1ansible

ansible是指令核心部分,其主要用於執行ad-hoc命令,即單條命令。默認后面需要跟主機和選項部分,默認不指定模塊時,使用的是command模塊。
Usage: ansible [options]

1、選項:

參數

-a MODULE_ARGS, --args=MODULE_ARGS 
模塊的參數。
--ask-vault-pass   
vault 密碼。
-B SECONDS, --background=SECONDS
異步運行時,多長時間超時。
-C, --check    
只是測試一下會改變什么內容,不會真正去執行;相反,試圖預測一些可能發生的變化。
-D, --diff  
當更改文件和模板時,顯示這些文件得差異,比--check效果好。
-e EXTRA_VARS, --extra-vars=EXTRA_VARS  
添加附加變量,比如key=value,yaml,json格式。
-f FORKS, --forks=FORKS
指定定要使用的並行進程數,默認為5個。
-h, --help 
顯示此幫助信息。
-i INVENTORY, --inventory-file=INVENTORY     
指定主機清單文件或逗號分隔的主機,默認為/etc/ansible/hosts。
-l SUBSET, --limit=SUBSET    
進一步限制所選主機/組模式,只執行-l 后的主機和組。
--list-hosts
輸出匹配主機的列表。
-m MODULE_NAME, --module-name=MODULE_NAME    
要執行的模塊,默認為command。
-M MODULE_PATH, --module-path=MODULE_PATH    
要執行的模塊的路徑。
--new-vault-password-file=NEW_VAULT_PASSWORD_FILE 
新vault密鑰文件。
-o, --one-line 
壓縮輸出,摘要輸出.嘗試一切都在一行上輸出。
--output=OUTPUT_FILE  
加密或解密輸出文件名 用於標准輸出。
-P POLL_INTERVAL, --poll=POLL_INTERVAL 
如果使用-B,則設置輪詢間隔。
--syntax-check    
對playbook進行語法檢查,且不執行playbook。
-t TREE, --tree=TREE 
將日志內容保存在該目錄中,文件名以執行主機名命名。
--vault-password-file=VAULT_PASSWORD_FILE 
vault密碼文件
-v, --verbose  
輸出執行的詳細信息,使用-vvv獲得更多,-vvvv 啟用連接調試
--version  
顯示程序版本號

  

2、鏈接選項:

參數

-k, --ask-pass 
要求用戶輸入請求連接密碼
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE    
私鑰路徑,使用這個文件來驗證連接
-u REMOTE_USER, --user=REMOTE_USER    
連接用戶
-c CONNECTION, --connection=CONNECTION
連接類型,默認smart
-T TIMEOUT, --timeout=TIMEOUT   
指定默認超時時間,默認是10S
--ssh-common-args=SSH_COMMON_ARGS
指定要傳遞給sftp / scp / ssh的常見參數 (例如 ProxyCommand)
--sftp-extra-args=SFTP_EXTRA_ARGS    
指定要傳遞給sftp,例如-f -l
--scp-extra-args=SCP_EXTRA_ARGS 
指定要傳遞給scp,例如 -l
--ssh-extra-args=SSH_EXTRA_ARGS 
指定要傳遞給ssh,例如 -R

  

3、特權升級選項:

參數

-s, --sudo 
使用sudo (nopasswd)運行操作 , 不推薦使用
-U SUDO_USER, --sudo-user=SUDO_USER  
sudo 用戶,默認為root, 不推薦使用
-S, --su     
使用su運行操作, 不推薦使用
-R SU_USER, --su-user=SU_USER
su 用戶,默認為root,不推薦使用
-b, --become 
運行操作
--become-method=BECOME_METHOD 
權限升級方法使用 ,默認為sudo,有效選擇:sudo,su,pbrun,pfexec,runas,doas,dzdo
--become-user=BECOME_USER 
使用哪個用戶運行,默認為root
--ask-sudo-pass   
sudo密碼,不推薦使用
--ask-su-pass 
su密碼,不推薦使用
-K, --ask-become-pass    
權限提升密碼

  

4、示例

ansible all -m ping
ansible 192.168.77.* -m ping
ansible all -m command -a ifconfig
ansible all -m shell -a "ifconfig eth0 |grep 'inet addr' "
ansible -i "192.168.77.129,192.168.77.130" 192.168.77.129  -m ping
ansible -i hosts  all --list-host
ansible -i hosts -l 192.168.77.130 all -m ping -t /tmp -vvvv
ansible web -l @retry_hosts.txt --list-hosts

  

2.2ansible-console

交互式命令執行界面

Usage: ansible-console <host-pattern> [options]

選項與ansible一致

2.3ansible-doc

該指令用於查看模塊信息,常用參數有兩個-l和 -s

Usage: ansible <host-pattern> [options]

1、選項

參數

-h, --help 
顯示此幫助信息
-l, --list     
列出可用的模塊
-M MODULE_PATH, --module-path=MODULE_PATH    
指定到模塊庫的路徑
-s, --snippet   
顯示playbook制定模塊的用法
-v, --verbose  
詳細模式(-vvv表示更多,-vvvv表示啟用連接調試)
--version  
顯示程序版本號

  

2、示例

ansible-doc -l
ansible-doc yum
ansible-doc yum -s

  

2.4ansible-galaxy

ansible-galaxy 指令用於方便的從 https://galaxy.ansible.com/ 站點下載第三方擴展模塊,我們可以形象的理解其類似於centos下的yum、python下的pip或easy_install

Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [–help] [options] …

示例:

ansible-galaxy install aeriscloud.docker  # 下載
ansible-galaxy  init abc   # 創建角色模板

  

2.5ansible-playbook

對於需反復執行的、較為復雜的任務,我們可以通過定義 Playbook 來搞定。Playbook 是 Ansible 真正強大的地方,它允許使用變量、條件、循環、以及模板,也能通過角色 及包含指令來重用既有內容。

Usage: ansible-playbook playbook.yml

相對於ansible,增加了下列選項:

1、參數

--flush-cache 
清除fact緩存
--force-handlers  
如果任務失敗,也要運行handlers
--list-tags 
列出所有可用的標簽
--list-tasks
列出將要執行的所有任務
--skip-tags=SKIP_TAGS   
跳過運行標記此標簽的任務
--start-at-task=START_AT_TASK  
在此任務處開始運行
--step 
一步一步:在運行之前確認每個任務
-t TAGS, --tags=TAGS
只運行標記此標簽的任務

  

2、示例

ansible-playbook -i hosts ssh-addkey.yml    # 指定主機清單文件
ansible-playbook -i hosts ssh-addkey.yml  --list-tags   # 列出tags
ansible-playbook -i hosts ssh-addkey.yml  -T install  # 執行install標簽的任務

  

2.6ansible-pull

pull模式在被配置的機器上運行,速度很快。在這種模式下,你需要提供一個git倉庫來供Ansible下載來配置你的機器。

Usage: ansible-pull -U <repository> [options]

Usage: ansible-vault [create|decrypt|edit|encrypt|rekey|view] [–help] [options] vaultfile.yml

示例:

ansible-vault create /tmp/123
# 創建加密文件
ansible-vault view  /tmp/123
# 查看加密文件
ansible-vault encrypt  /tmp/abc
# 加密文件
ansible-vault decrypt  /tmp/abc
# 解密文件

  

三 ansbile配置文件詳解

 

ansible配置文件只有一個,即 ansible.cfg
ansible.cfg配置文件可以存在於多個地方, ansible讀取配置文件的順序依次是當前命令執行目錄 -> 用戶家目錄下的 .ansible.cfg -> /etc/ansible/ansible.cfg

3.1defaults

[defaults]

#inventory      = /etc/ansible/hosts   //定義Inventory
#library        = /usr/share/my_modules/  //自定義lib庫存放目錄 
#remote_tmp     = ~/.ansible/tmp       //零時文件遠程主機存放目錄
#local_tmp      = ~/.ansible/tmp       //零時文件本地存放目錄
#forks          = 5                    //默認開啟的並發數
#poll_interval  = 15                   //默認輪詢時間間隔
#sudo_user      = root                 //默認sudo用戶
#ask_sudo_pass = True                  //是否需要sudo密碼
#ask_pass      = True                  //是否需要密碼
#host_key_checking = False             //首次連接是否檢查key認證
#roles_path    = /etc/ansible/roles    //默認下載的Roles存放的目錄
#log_path = /var/log/ansible.log       //執行日志存放目錄
#module_name = command                 //默認執行的模塊
#action_plugins     = /usr/share/ansible/plugins/action //action插件存放目錄
#callback_plugins   = /usr/share/ansible/plugins/callback //callback插件存放目錄
#connection_plugins = /usr/share/ansible/plugins/connection  //connection插件存放目錄
#lookup_plugins     = /usr/share/ansible/plugins/lookup //lookup插件存放目錄
#vars_plugins       = /usr/share/ansible/plugins/vars //vars插件存放目錄
#filter_plugins     = /usr/share/ansible/plugins/filter //filter插件存放目錄
#test_plugins       = /usr/share/ansible/plugins/test //test插件存放目錄
#strategy_plugins   = /usr/share/ansible/plugins/strategy //strategy插件存放目錄
#fact_caching = memory                 //getfact緩存的主機信息存放方式
#retry_files_enabled = False              
#retry_files_save_path = ~/.ansible-retry  //錯誤重啟文件存放目錄

  

3.2privilege_escalation

[privilege_escalation]
#become=True            //是否sudo
#become_method=sudo     //sudo方式
#become_user=root       //sudo后變為root用戶
#become_ask_pass=False  //sudo后是否驗證密碼

  

3.3paramiko_connection

[paramiko_connection]
#record_host_keys=False //不記錄新主機的key以提升效率
#pty=False              //禁用sudo功能

  

3.4ssh_connection

[ssh_connection]
#pipelining = False   //管道加速功能,需配和requiretty使用方可生效

  

3.5selinux

[selinux]
#libvirt_lxc_noseclabel = yes  //selinux配置

  

3.6colors

[colors]
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
#diff_remove = red
#diff_lines = cyan

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM