天天看點

ansible 切換使用者建立ssh連接配接并使用sudo 權限執行程式

Ansible 是一款非常有用的統一叢集管理工具,安裝簡單不需要再被控節點安裝用戶端。介紹Ansible的文章已經很多了,本文不再對ansible做基礎介紹。歡迎拍磚指正。

由于項目需求,需要使用ansible在控制節點以root身份運作playbook,并在playbook中調用其他程式操作/etc下的檔案,是以該程式需要使用sudo或者root權限運作。如下圖所示:

ansible 切換使用者建立ssh連接配接并使用sudo 權限執行程式

ansible 運作playbook的時候預設首先會以運作程式的使用者身份與用戶端的對應使用者建立連接配接,本文采用SSH連接配接。比如以root身份運作 "ansible-playbook test.yml "時,ansible首先會以root身份與客戶機的root建立ssh連接配接。

1.由于本文采用ssh連接配接,首先需要生成ssh密碼,預設儲存到運作ssh-keygen的使用者主目錄中。指令如下:

ssh-keygen

【注:切換到建立ssh連接配接的使用者usera運作: su usera,因為該認證檔案隻适用于本使用者usera與其他使用者的ssh連接配接認證】

2. 拷貝ssh公鑰到被控制機器節點。指令如下:

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

3.接下來就可以在root使用者的環境中運作之前建好的test.yml檔案了。指令如下:

ansible-playbook test.yml --user=usera --private-key=/home/usera/.ssh/id_rsa -s  

這裡 --user=usera 表示使用usera與被控節點的usera建立ssh連接配接。--private-key表示ssh使用的認證檔案,

-s 表示在連接配接到被控制機器節點後使用usera 的sudo權限運作test.yml中的指令。 

 由于需要使用usera的sudo權限,這裡需要usera的sudo密碼,有2種方式實作,第一:在運作指令中添加 --ask-sudo-pass,在指令運作時手動輸入sudo的密碼;第二:在ansible的配置檔案hosts中配置sudo密碼,ansible預設的hosts位于/etc/ansible/hosts。本文采用第二種方式。

hosts檔案的配置如下所示:

[usera]

192.168.1.108 ansible_sudo_pass='123456'

[userb]

192.168.1.107 ansible_sudo_pass='123456'

【注:ansible 建立連接配接時預設使用的認證檔案是該使用者的主目錄下的ssh rsa檔案,是以當使用其他使用者建立ssh連接配接時需要指定--private-key檔案】

運作中的坑:

在拷貝玩ssh檔案到被控制主機後,第一次運作會出現檢查keys的對話,導緻ssh連接配接失敗,如下:

The authenticity of host '192.168.0.5 (192.168.0.5)' can't be established.

ECDSA key fingerprint is 05:51:e5:c4:d4:66:9b:af:5b:c9:ba:e9:e6:a4:2b:fe.

Are you sure you want to continue connecting (yes/no)?

為了確定連接配接ansible的順利執行,需要在ansible的配置檔案中添加忽略keys檢查的配置,ansible的配置檔案預設在

/etc/ansible/ansible.cfg。在該檔案中添加如下語句即可。

host_key_checking = False

繼續閱讀