ansible-playbook 可以方便快速的批量執行部署和運維任務,對於不同的場景和服務器,需要使用不同的權限提升方式。
最佳實現:為了提高playbook的兼容性,跟功能沒有直接關系的權限提升腳本,不要出現在palybook正文中,可以在ansible-playbook運行的時候,通過-e傳入
場景一:我們有服務器的root密碼,而且允許root直接登陸。
ansible-playbook -i 'aliyun.lihuanhuan.net,' ./ansible_playbook_test/site.yml -e "ansible_ssh_user='root' ansible_ssh_pass='password'"
#切換到app_user,並執行java程序
- name: run app by java_user
shell: java -jar hello.jar
become: yes
become_method: su
become_user: app_user
場景二:我們有服務器的root密碼,但是只允許普通用戶user1使用su切換到root。
ansible-playbook -i 'aliyun.lihuanhuan.net,' ./ansible_playbook_test/site.yml -e "ansible_ssh_user='user1' ansible_ssh_pass='user1_password' ansible_become='yes' ansible_become_method='su' ansible_become_user='root' ansible_become_pass='root_password' " -vvv
#切換到app_user,並執行java程序
- name: run app by java_user
shell: java -jar hello.jar
become: yes
become_method: su
become_user: app_user
場景三:我們只有服務器的app_user密碼,而且只允許普通用戶user1使用su切換到app_user。
ansible-playbook -i 'aliyun.lihuanhuan.net,' ./ansible_playbook_test/site.yml -e "ansible_ssh_user='user1' ansible_ssh_pass='user1_password' ansible_become='yes' ansible_become_method='su' ansible_become_user='app_user' ansible_become_pass='app_user_password' " -vvv
#切換到app_user,並執行java程序
- name: run app by java_user
shell: java -jar hello.jar
become: yes
become_method: su
become_user: app_user
場景四:我們只有user1和password,但是允許使用特定的實用程序切換到root,例如:dzdo su -
ansible-playbook -i 'aliyun.lihuanhuan.net,' ./ansible_playbook_test/site.yml -e "ansible_ssh_user='user1' ansible_ssh_pass='user1_password' ansible_become_exe='dzdo su -' ansible_become='yes' ansible_become_method='su' ansible_become_user='root' ansible_become_pass='user1_password' " -vvv
#切換到app_user,並執行java程序
- name: run app by java_user
shell: java -jar hello.jar
become: yes
become_method: su
become_user: app_user
refer to https://docs.ansible.com/ansible/latest/user_guide/become.html?highlight=become method