vim /etc/ssh/ssh_config
Host * GSSAPIAuthentication yes # If this option is set to yes then remote X11 clients will have full access # to the original X11 display. As virtually no X11 client supports the untrusted # mode correctly we set this to yes. ForwardX11Trusted yes # Send locale-related environment variables SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE SendEnv XMODIFIERS ControlMaster yes # 這個是新增的 ControlPath /tmp/%r@%h:%p # 這個是新增的 ControlPersist 10m # 這個是新增的
[root@host-172-20-6-120 playbooks]# ssh -O check 172.20.6.121 root@172.20.6.121's password: Master running (pid=16802) # 有這個說明開啓成功 上面的不是」零「 而是大寫的0
測試速度python
[root@host-172-20-6-120 playbooks]# time ssh 172.20.6.121 /bin/true root@172.20.6.121's password: ControlSocket /tmp/root@172.20.6.121:22 already exists, disabling multiplexing real 0m2.137s user 0m0.032s sys 0m0.005s
ansible是經過使用ssh和遠程主機進行通訊,因此對ssh有這很強的依賴。在OpenSSH 5.6之後支持Multiplexing這個特性,能夠經過在ansible配置中設置以支持該特性。redis
以下是配置參數,設置長鏈接保持時間爲5天;control_path指定socket文件所保存的位置。json
ssh_args = -o ControlMaster=auto -o ControlPersist=5d control_path = /etc/ansible/ssh-socket/%%h-%%p-%%r
經過上面配置後,ansible中控機上執行一次與遠程主機的鏈接以後,這個鏈接會持久保持設定時間之久。能夠經過netstat命令查看到ESTABLISHED狀態的鏈接信息。vim
注意1:OpenSSH須要5.6以上版本,低版本須要升級才能使用。
Centos7系統上安裝的OpenSSH版本是較新的,能夠直接支持;對於Centos6的系統,自帶的OpenSSH版本較低,能夠用下面這個yum源進行升級yum update openssh-clients:緩存
# /etc/yum.repos.d/openssh.repo [CentALT] name=CentALT Packages for Enterprise Linux 6 baseurl=http://mirror.neu.edu.cn/CentALT/6/$basearch/ enabled=1 gpgcheck=0
注意2:control_path指定的目錄不存在,或執行ansible命令的用戶沒有寫權限的話是會報錯的。服務器
默認狀況下,ansible的執行流程是把生成好的本地python腳本PUT到遠程服務器而後運行。若是開啓了pipelining,整個流程少了一個PUT腳本到遠程服務器的步驟,直接在SSH的會話中進行,能夠提升整個執行效率。ssh
# 在ansible.cfg配置文件中設置pipelining爲True pipelining = True
須要注意的是:若是開啓pipelining,須要被控的遠程服務器將/etc/sudoers中的」Defaults requiretty」註釋掉,不然會出現相似如:you must have a tty to run sudo 的報錯。socket
accelerate模式相似於SSH的Multiplexing功能,都是使ansible控制服務器和遠程服務器之間保持長鏈接。accelerate模式是使用python程序在遠程服務器上運行一個守護進程,ansible經過這個守護進程監聽的端口進行通訊。memcached
accelerate模式的開啓方法很簡單,只要在playbook中配置accelerate: true便可。ansible.cfg配置文件中須要配置一些accelerate參數,如:測試
[accelerate] accelerate_port = 5099 accelerate_timeout = 30 accelerate_connect_timeout = 5.0
注意:使用accelerate模式,須要控制服務器和遠程服務器都安裝python-keyczar包
ansible playbook默認第一個task是Gathering Facts收集各主機的facts信息,以方便咱們在paybook中直接引用facts裏的信息。
若是不須要用到facts信息的話,能夠設置gather_facts: false,來省去facts採集這一步以提升playbook效率。
若是既想用facts信息,有但願能提升playbook的效率的話,能夠採用facts緩存來實現。
facts緩存支持多種方式:json文件方式,redis方式,memcache方式等。各類方式的配置都是在ansible.cfg中配置。
1)json文件方式
vim /etc/ansible/ansible.cfg [defaults] gathering=smart fact_caching_timeout=86400 fact_caching=jsonfile fact_caching_connection=/path/to/ansible_fact_cache
這裏的86400單位爲秒,表示緩存的過時時間。保存facts信息的json文件保存在/path/to/ansible_fact_cache下面,文件名是按照inventory hostname來命名的。
2)redis方式
gathering=smart fact_caching_timeout=86400 fact_caching=redis
須要注意的是,facts存儲不支持遠端的redis,須要在ansible的控制服務器上安裝redis;同時,還須要安裝python的redis模塊。
3)memcache方式
gathering=smart fact_caching_timeout=86400 fact_caching=memcached
與redis方式相似,須要運行memcached服務,同時,安裝python的memcached依賴包。