如何在shell脚本中使用sudo命令运行命令?这个脚本将由cron定时任务执行,因此不应该有人工干预手动输入密码。
在中文中输入cronjob
sudo crontab -e
默认情况下,整个脚本将以root身份执行,无需密码。
echo 'password' | sudo -S command
既然这基本上就是sudo会做的事情,为什么不在cron中以root身份运行脚本本身呢?你是在说用户crontab吗?
我认为你正在尝试做这件事:
user# crontab -e
* * * * * sudo ./code_here
但是每次调用脚本时,您都需要提供凭据
因此,您可以尝试这个:
user# sudo su
root# crontab -e
* * * * * ./code goes here
无法评论,所以我尝试将其写成答案。
将根密码保存为明文是一种安全风险。 如果脚本保存在root的crontab中,并且该脚本位于普通用户的文件夹中,则也存在风险 - 即使用户无法写入该文件,但仍可以(至少在某些发行版中)删除该文件,然后该文件可能被具有相同名称的恶意文件替换(从而“注入”到root的cronjob中)。
建议:
sudo visudo
并添加类似以下内容:
username ALL= NOPASSWD: /home/username/scriptname.sh
分配给启动脚本的用户组(例如“users”),限制权限:
chown -v root:users /home/username/scriptname.sh
chmod -v 0650 /home/username/scriptname.sh
然后将scriptname.sh设置为不可改变的,以防止删除(即使是root用户,在不删除不可变标志的情况下)
chattr +i /home/username/scriptname.sh
crontab -e
* 3 * * * sudo /home/username/scriptname.sh &> /home/username/scriptname.log
。更新了一下。