sudo(superuser or another do)讓普通用戶可以以超級管理員或其他人的身份執行命令。
sudo基本流程如下:
1.管理員需要先授權(修改/etc/sudoers文件)
2.普通用戶以sudo的形式執行命令
3.可以通過sudo -l 查看授權情況
修改/etc/sudoers的方法如下:
1.visudo(帶語法檢查,默認沒有顏色提示)
2.vim /etc/sudoers(不帶語法檢查,默認有顏色提示)
授權格式:
用戶或組 主機列表=(提權身份) [NOPASSWD]:命令列表
NOPASSWD的意思是執行sudo不需要輸入自己的密碼
注意事項:命令需要寫絕對路徑,對組授權需要在組名稱前面加%
## cat /etc/sudoers
root ALL=(ALL) ALL
tom ALL=(root) /usr/bin/systemctl tom以root身份可以啟動關閉重啟服務
%wheel ALL=(ALL) ALL
$ sudo systemctl restart sshd 提權以root身份執行
ansible批量給所有主機創建系統賬戶,授權
遠程所有被管理主機批量創建系統賬戶,賬戶名稱為alice,密碼為123456。
# ansible all -m user -a "name=alice password={{'123456' | password_hash('sha512')}}"
配置alice賬戶可以提權執行所有命令
使用lineinfile模塊修改遠程被管理端主機的/etc/sudoers文件,line=后面的內容是需要添加到文件最后的具體內容。等於是在/etc/sudoers文件末尾添加一行:alice ALL=(ALL) NOPASSWD:ALL
#ansible all -m lineinfile -a "path=/etc/sudoers line='alice ALL=(ALL) NOPASSWD:ALL'“
驗證:在node1上面測試
#su - alice
$sudo systemctl restart sshd
######################
修改ansible配置文件
######################
默認ansible是通過root遠程被管理端主機
可以修改配置文件以普通用戶遠程被管理端主機執行自動化運維
vim ~/ansible/ansible.cfg
[defaults]
inventory = ~/ansible/hosts
remote_user = alice #以什么用戶遠程被管理主機(被管理端主機的用戶名)
#host_key_checking = False #是否校驗密鑰
[privilege_escalation]
become = true #alice沒有特權,是否需要切換用戶提升權限
become_method = sudo #如何切換用戶(比如用su就可以切換用戶,這里是sudo)
become_user = root #切換成什么用戶(把alice提權為root賬戶)
become_ask_pass = no #執行sudo命令提權時是否需要輸入密碼
遠程被管理端主機的alice用戶,需要提前配置SSH密鑰。
#for i in node1 node2;
do ssh-copy-id alice@$i
done
# ssh alice@node1 #依次遠程所有主機看看是否需要密碼
########################
修改inventory主機清單配置文件(實驗參考)
########################
vim ~/ansible/inventory
[test]
node1 ansible_ssh_port=220 #自定義遠程SSH端口
[proxy]
node2 ansible_ssh_user=alice #自定義遠程連接的賬戶名
[webserver]
node[3:4] ansible_ssh_pass=密碼 #自定義遠程連接的密碼
[database]
node5 ansible_ssh_private_key_file=密鑰文件
[cluster:children]
webserver
database
