Ansible入門篇:SSH配置免密互信


生成秘鑰

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

 

測試

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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