在Bash shell中使用sudo运行命令

5

如何在shell脚本中使用sudo命令运行命令?这个脚本将由cron定时任务执行,因此不应该有人工干预手动输入密码。

5个回答

9

在中文中输入cronjob

sudo crontab -e 

默认情况下,整个脚本将以root身份执行,无需密码。


6

echo 'password' | sudo -S command


搞定了,感谢 jcalloway。 - The Georgia

0

既然这基本上就是sudo会做的事情,为什么不在cron中以root身份运行脚本本身呢?你是在说用户crontab吗?


0

我认为你正在尝试做这件事:

       user# crontab -e
        * * * * * sudo ./code_here

但是每次调用脚本时,您都需要提供凭据

因此,您可以尝试这个:

       user# sudo su
        root# crontab -e
       * * * * *    ./code goes here

以这种方式:它将以管理员权限运行。

Leonel,我尝试了你的建议,但仍然不起作用。我找不到可行的解决方案:( - The Georgia

0

无法评论,所以我尝试将其写成答案。

将根密码保存为明文是一种安全风险。 如果脚本保存在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

将命令放入脚本并将其放入sudoers配置中的另一个好处是它允许用户仅在脚本内运行这些命令。
现在,可以将此脚本添加到root或用户的crontab中,类似于以下内容:
crontab -e

每天执行一次脚本的计划任务:* 3 * * * sudo /home/username/scriptname.sh &> /home/username/scriptname.log。更新了一下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接