平时我们会使用到sudo 提升权限重启服务或者其他操作。举例:Mac重启蓝牙服务:
sudo pkill bluetoothd
,如果没有加sudo
执行的话,则会提示:pkill: signalling pid 22255: Operation not permitted
没有权限操作。 那么如果添加了sudo
,则需要你手动输入密码,在写自动化脚本或者定时任务时候是没有人为交互的,较为麻烦。当然可以通过嵌套expect
脚本或通过-S
参数读取标准输出来获取密码解决,但是这些都有较为大的密码泄露的风险在,所不在我的考虑范围,经过查询资料可以通过Unix
的sudoers
特性配置免密交互,教程如下
sudo visudo
…………
# 上面的内容省略
# root and users in group wheel can run anything on any machine as any user
root ALL = (ALL) ALL
%admin ALL = (ALL) ALL
# 新增一行信息,格式如下:用户名 ALL=(ALL) NOPASSWD: 执行的命令
apper ALL=(ALL) NOPASSWD: /usr/bin/pkill bluetoothd
# 下面的内容省略
…………
保存退出,mac退出终端重新登陆测试即可。
⚠️注意:此操作我理解的意思是,我设置了某些命令在输入sudo
提升权限的时候,无需密码确认。所以在测试的时候还是需要sudo
的。(别问我怎么知道,我测试的时候踩了这个坑)
测试
sudo pkill bluetoothd
# 不需要输入密码没有报错则成功