ansible 切換使用者建立ssh連線並使用sudo 許可權執行程式
ansible 執行的時候預設首先會以執行程式的使用者身份與客戶端的對應使用者建立連線,比如以root身份執行ansible-playbook test.yml時,ansible首先會以root身份與客戶機的root建立ssh連線。
如果要指定使用者,需要使用--user 的引數,如果需要sudo 到root,需要用-s的引數
ssh-keygen
【注:切換到建立ssh連線的使用者usera執行: su - usera,因為該認證檔案只適用於本使用者usera與其他使用者的ssh連線認證】
拷貝ssh公鑰到被控制機器節點
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
在root使用者下執行命令
ansible-playbook test.yml --user=usera --private-key=/home/usera/.ssh/id_rsa -s
ansible -i hosts testgroup -m ping --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密碼,有3種方式實現,第一:在執行命令中新增 --ask-sudo-pass,在命令執行時手動輸入sudo的密碼;第二,讓usera sudo 免密碼,第三:在ansible的配置檔案hosts中配置sudo密碼,ansible預設的hosts位於/etc/ansible/hosts。本文采用第3種方式。
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
參考: