运行 bash shell 中带 sudo 的命令

Run a command with sudo in bash shell

如何使用 sudo 在 shell 脚本中 运行 命令?此脚本将 运行 由 cron 作业执行,因此应该不需要人工干预来手动输入密码。

为什么不 运行 脚本本身作为 cron 中的 root,因为这基本上是 sudo 会做的?您是在谈论用户 crontab 吗?

中输入cronjob
sudo crontab -e 

然后整个脚本将默认以 root 用户身份执行,无需密码。

回声'password' | sudo -S 命令

我认为你正在尝试这样做:

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

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

所以你可以试试这个:

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

这样:会运行有管理员权限。

无法发表评论所以我会尝试将其写为答案。

将 root 密码保存为明文存在安全风险。 如果脚本位于普通用户的文件夹中,则将脚本保存在 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

UPD 次要编辑。