目錄
- 使用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