生成秘鑰
ssh-keygen :這個命令是用來生成本機的公鑰和私鑰的
ssh-keyscan : 這條命令是用來把遠程服務器的公鑰來獲取到本地的

分配公鑰
ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.2.244
注意第一次是要輸入密碼的
測試免密登陸
ssh -l root 192.168.2.244
設定 ansible.cfg
首先關閉公鑰認證
如果說不想關閉公鑰認證的話,可以用ssh-keycan 命令將公鑰添加到本地的known_hosts文件里面去
具體命令是ssh-keyscan IP1 (IP2 ...) >> /root/.ssh/known_hosts 可以添加多個
Ansible1.2.1及其之后的版本都會默認啟用公鑰認證.
公鑰認證就是如果之后的某一台客戶端和之前登錄過的某一台主機IP相同,那么在“known_hosts”中有了不同的key,這時會提示一個錯誤信息直到被糾正為止。
在使用Ansible時,可能不想遇到那樣的情況,如果有個主機沒有在“known_hosts”中被初始化將會導致在交互使用Ansible或定時執行Ansible時對key信息的確認提示。如果想要禁用這個行為的話,可以關閉公鑰認證,而且公鑰認證會比較慢,也是提高效率的一個方法
# uncomment this to disable SSH key host checking host_key_checking = False
默認用戶名
# (/usr/bin/ansible will use current user as default) remote_user = root
日志文件存放路徑
# if so defined, consider logrotate log_path = /var/log/ansible.log
私鑰文件存儲位置
# if passing --private-key to ansible or ansible-playbook private_key_file = /root/.ssh
簡易配置:
[defaults]
remote_port=22
host_key_checking=False
remote_user=root
log_path=/var/log/ansible.log
private_key_file=/root/.ssh
設定hosts
默認是/etc/ansible/hosts ,如果想改變可以在ansible.cfg文件中設置 inventory= /etc/ansible/hosts
1、定義主機和組
# vim /etc/ansible/hosts
192.168.2.244 #可以直接為IP地址
xxx.com #可以是域名
xxx.com:22 #可以:接ssh端口
[webserver] #[]內為分組名,下面都是該組組員
web[1:10].xxx.com #[1:10]表示1~10所有數字
db-[a:f].xxx.com #[a:f]表示a~f所有字母
2、定義主機變量
定義的變量可以在playbook中使用,在playbook中設定的同名變量會優先於此處變量。
test1.xxxx.com ansible_connection=ssh ansible_ssh_user=ubuntu ansible_ssh_pass=xiaocao123 #選擇連接類型和連接用戶
host1 ansible_ssh_host=192.168.2.244 ansible_ssh_user=ubuntu ansible_ssh_pass=xiaocao123
test2.xxxx.com http_port=8800 #定義http_port端口號8800
3、定義組變量
[test]
test1.xxx.com
test2.xxx.com
[test:vars] #組變量,下面定義的變量test組內的所有主機通用
ntp_server=xx
proxy=xx
4、把一個組作為另一個組的子成員
[apache]
apache.xxx.com
[nginx]
nginx.xxx.com
[webserver]
web.xxx.com
[webserver:children]
apache
nginx
#上例中webserver包括apache.xxx.com、nginx.xxx.com、web.xxx.com
5、hosts參數
ansible_ssh_host
將要連接的遠程主機名.與你想要設定的主機的別名不同的話,可通過此變量設置.
ansible_ssh_port
ssh端口號.如果不是默認的端口號,通過此變量設置.
ansible_ssh_user
默認的 ssh 用戶名
ansible_ssh_pass
ssh 密碼(這種方式並不安全,我們強烈建議使用 SSH 密鑰)
ansible_sudo_pass
sudo 密碼(這種方式並不安全,我們強烈建議使用 SSH 密鑰)
ansible_connection
與主機的連接類型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默認使用 paramiko.1.2 以后默認使用 'smart','smart' 方式會根據是否支持 ControlPersist, 來判斷'ssh' 方式是否可行.
ansible_ssh_private_key_file
ssh 使用的私鑰文件.適用於有多個密鑰,而你不想使用 SSH 代理的情況.
ansible_shell_type
目標系統的shell類型.默認情況下,命令的執行使用 'sh' 語法,可設置為 'csh' 或 'fish'.
6、變量讀取的四個位置
hosts配置
Playbook中vars定義的區域
Roles中vars目錄下的文件
Roles同級目錄group_vars和hosts_vars目錄下的文件
#設置變量時盡量沿用同一種方式。
7、ansible正則
(1)全量匹配 all與*功能相同,但*需引起來。
ansible all -m ping
ansible "*" -m ping
(2)邏輯或(or)匹配
多台主機或多個組同時執行
ansible "test1:test2" -m ping
(3)邏輯非(!)匹配
所有在web1組,但不在web2組的主機
web1:!web2
(4)邏輯與(&)匹配
web1和web2中同時存在的主機
web1:&web2
(5)模糊匹配
檢查192.168.2.0/24網段所有主機存活狀態。
ansible 192.168.2.* -m ping
test開頭的所有組
ansible "test*" -m ping
(6)正則匹配,"~"開始表示正則匹配
ansible "~(web|data|test)\.example\.(com|org)" -m ping
測試