1. 基於ssh運行
2. 無需客戶端css
這裏提供四種安裝方式,根據本身的須要任選一種便可html
1.1使用yum安裝python
yum install epel-release -ygit
yum install ansible -ygithub
1.2 使用pip安裝
pip install ansibleweb
若是沒pip,需先安裝好pip.方法以下:macos
yum install python-setuptoolsapache
easy_install pipjson
1.3 源碼安裝pipruby
準備工具
yum install git python-setuptools gcc python-devel -y
獲取源碼
git clone https://github.com/ansible/ansible
安裝ansible
cd ansible
python setup.py install
1.4 brew安裝
在macos下,可以使用brew安裝
brew install ansible
ansible經過文件來定義你要管理的主機,也就是說把你須要的管理的主機ip寫到一個文件中便可。
這個文件通常名爲hosts,它能夠放在多個路徑下,也能夠自定義名稱和路徑。
默認咱們用/etc/ansible/hosts這個文件便可
若是是macos 10 以上的系統,默認是沒有權限寫/etc/的,能夠經過自定義配置來添加hosts文件
在~下添加.ansible.cfg文件,指定hosts文件的路徑,內容以下
[defaults]
hostfile = /usr/local/etc/ansible/hosts
hosts文件的格式爲:
[webservers]
10.2.2.121 10.2.2.122
這裏webservers是主機組的名稱,10.2.2.121和10.2.2.122就是具體的服務器ip了
按照這個格式來自定義本身要管理的主機和主機組便可
如我想定義一組名稱test的主機,ip分別是10.2.1.201,10.2.1.202
格式以下
[test]
10.2.1.201 10.2.1.202
默認ssh端口是22,若是主機端口號是其餘的,在ip後加:端口號便可,如10.2.1.203的端口是2211,屬於test組,格式以下:
[test] 10.2.1.201 10.2.1.202 10.2.1.203:2211
若是要定義登陸機器的用戶名和密碼,好比10.2.1.204的用戶名是test,密碼是admin@test,端口是2244,
[test] 10.2.1.201 10.2.1.202 10.2.1.203:2211 10.2.1.204:2244 ansible_ssh_user=test ansible_ssh_pass=admin@test
還能夠定義主機的別名,如
[test] web-01 ansible_host=10.2.1.205 ansible_ssh_user=test ansible_ssh_pass=admin@test ansible_ssh_port=2233
建議使用免密碼登陸來管理服務器,在ansible的服務器上配置一套ssh的key,經過ssh-copy-id把公鑰分發到要管理的服務器上。具體步驟以下:
1.使用ssh-keygen產生ssh密鑰
[root@test-201 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
dd:20:23:7c:1a:2e:01:bf:b1:67:7a:08:87:5f:e6:7e root@test-201
The key’s randomart image is:
+–[ RSA 2048]—-+
| . |
| o . |
| + + + . |
| . * = + o |
| o = B S . . |
| + X |
| + o |
| o E |
| .. |
+—————–+
2.將公鑰發送到要管理的服務器
使用ssh-copy-id命令
好比要發送到10.2.31.202,使用以下命令:
[root@test-201 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 10.2.31.202
root@10.2.31.202’s password:
Now try logging into the machine, with 「ssh ‘10.2.31.202’」, and check in:
.ssh/authorized_keys
to make sure we haven’t added extra keys that you weren’t expecting.
3.將公鑰批量發送到要管理的服務器
若是你有100臺服務器初始化了,手動發key確定很累的,若是你這100臺機器密碼一致,能夠經過ansible的authorized_key模塊來實現批量發送,命令以下
ansible test --ask-pass -u 用戶名 -m authorized_key -a "user=用戶名 key='$(cat ~/.ssh/id_rsa.pub)'"
以後輸入機器的密碼便可批量發送了。
命令格式以下:
ansible + 主機組名稱 + -m + 模塊名稱 + -a + 參數
主機組名稱,即hosts中定義的主機組名稱
-m 指使用模塊,後加指定的模塊名稱
-a 指傳給模塊的參數
在不指定模塊時,默認調用command模塊。
如咱們想看下test組上的服務器的/tmp下面有哪些文件,可使用以下命令
ansible test -a 「ls /tmp」
[root@test-201 ~]# ansible test -a "ls /tmp" 10.2.31.203 | SUCCESS | rc=0 >> ansible_EMEGZI testabcdefg
咱們可使用copy模塊,將本地文件發送到目標服務器上,如:
ansible test -m copy -a 「src=/root/install.log dest=/tmp」
這個命令是將本地的/root/install.log發送到test組的/tmp下,執行的效果以下:
[root@test-201 ~]# ansible test -m copy -a "src=/root/install.log dest=/tmp" 10.2.31.203 | SUCCESS => { "changed": true, "checksum": "114ee153946d9cd2e690c405e5796a4fcc400542", "dest": "/tmp/install.log", "gid": 0, "group": "root", "md5sum": "17b18780156a31a65d62a324110d686e", "mode": "0644", "owner": "root", "secontext": "unconfined_u:object_r:admin_home_t:s0", "size": 43688, "src": "/root/.ansible/tmp/ansible-tmp-1466157410.68-191787255687953/source", "state": "file", "uid": 0 }
你可使用ansible-doc –list查看當前的全部模塊
[root@test-201 ~]# ansible-doc --list …. …. authorized_key Adds or removes an SSH authorized key azure create or terminate a virtual machine in azure azure_rm_deployment Create or destroy Azure Resource Manager template deployments azure_rm_networkinterface Manage Azure network interfaces. azure_rm_networkinterface_facts Get network interface facts. azure_rm_publicipaddress Manage Azure Public IP Addresses. azure_rm_publicipaddress_facts Get public IP facts. azure_rm_resourcegroup Manage Azure resource groups. azure_rm_resourcegroup_facts Get resource group facts. azure_rm_securitygroup Manage Azure network security groups. …. …
使用ansible-doc + 模塊名,能夠看具體某個模塊的使用方法,如查看yum模塊的使用方法
ansible-doc yum
[root@test-201 ~]# ansible-doc yum > YUM Installs, upgrade, removes, and lists packages and groups with the `yum' package manager. ......
ansible自帶了不少豐富的模塊,詳細請看:
http://docs.ansible.com/ansible/list_of_all_modules.html
顧名思義,playbooks就像劇本同樣,將你要作的事情先定義好,而後經過它來執行。這也是ansible一個強大的地方,能夠經過它來作些複雜的應用部署。
舉個例子:
[root@test-201 ~]# cat test-playbook
- hosts: test tasks: - name: 確認apache是否在運行 service: name=httpd state=started
這是個很簡單的playbooks,首先它指定了要操做的主機組是test,定義了一個名稱:確認apache是否在運行,執行pkg=httpd state=latest動做。
執行以下命令ansible-playbook test-playbook,效果以下:
[root@test-201 ~]# ansible-playbook test-playbook
PLAY [test] ******************************************************************** TASK [setup] ******************************************************************* ok: [10.2.31.203] TASK [確認apache是否在運行] *********************************************************** ok: [10.2.31.203] PLAY RECAP ********************************************************************* 10.2.31.203 : ok=2 changed=0 unreachable=0 failed=0
因爲playbooks涉及的內容較多,這裏就不一一贅述了,更多內容請參考文檔: http://ansible-tran.readthedocs.io/en/latest/docs/playbooks.html
1.有時候若是想直接操做某臺服務器,但又沒有在hosts裏定義這臺服務器時,可使用以下命令:
ansible all -i ‘服務器ip,’
注意服務器ip後面要加個,
如
ansible all -i ‘10.2.31.201,’ -u test -k -a ‘uptime’
2.有時候我忘記配了哪些主機和組,我又不想看配置文件,有沒有什麼命令查看?
顯示全部的組
ansible localhost -m debug -a 'var=groups.keys()'
顯示全部的組和主機
ansible localhost -m debug -a 'var=groups'
目前遇到兩個bug(也多是個人使用方式不對,正在關注中)
現已修復 1.在中文路徑下沒法使用.
若是在一個含中文的路徑下面使用ansible,會沒法執行,提示:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 14
因此不要跑到中文路徑下面去執行ansible
2.su命令不能用. 使用su命令不成功,無在目標機器上經過一個普通用戶su切換爲root執行相關命令 錯誤以下: ansible Timeout (12s) waiting for privilege escalation prompt