在 crontab 中运行 .sh

在 crontab 中运行 .sh

我正在 crontab 上运行以下脚本。

@reboot sh  /home/root1/ssh.sh

该文件ssh.sh仅包含

sudo systemctl start ssh.service

但是当设备启动时,SSH 服务未运行。

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset:>
     Active: inactive (dead)
       Docs: man:sshd(8)
             man:sshd_config(5)
lines 1-5/5 (END)

输出如下cat /var/log/cron.log

Dec  9 09:40:34 ubuntu cron[843]: (CRON) INFO (pidfile fd = 3)
Dec  9 09:40:34 ubuntu cron[843]: (CRON) INFO (Running @reboot jobs)
Dec  9 09:40:34 ubuntu CRON[915]: (root1) CMD (sh  /home/root1/ssh.sh)
Dec  9 09:41:04 ubuntu systemd-timesyncd[709]: Initial synchronization to time server 91.189.89.198:123 (ntp.ubuntu.com).
Dec  9 09:44:56 ubuntu crontab[3018]: (root1) LIST (root1)

请找到如下的输出sudo -l

root1@ubuntu:~$ sudo -l

Matching Defaults entries for root1 on ubuntu: <br/>
    env_reset, mail_badpass,<br/> secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin <br/>

User root1 may run the following commands on ubuntu:<br/>
    (ALL : ALL) NOPASSWD: /home/root1/ssh.sh <br/>
    (ALL : ALL) ALL

如果我在 sudoers 中使用“root1 ALL=(ALL:ALL) NOPASSWD:ALL”,则 crontab 会在重新启动时执行 shell 脚本。

但是,如果我使用“root1 (ALL : ALL) NOPASSWD: /home/root1/ssh.sh”,则 shell 脚本在重新启动时无法工作,即使手动执行它也会提示输入密码。

答案1

将其设置在root 的 crontab而不是用户 crontab:

$ sudo crontab -e

打开编辑器后,添加命令@reboot- 不要输入sudo命令crontab

笔记: 在 root 下运行作业没有特别的安全风险crontab,只要您使用一些常识。我觉得这里最重要的一点是:对正在运行的脚本的写访问权限应该仅限于 root 用户。这将防止“常规”用户更改将以 root 权限运行的脚本。

答案2

为了从 cron 运行命令,您需要在 sudo 中添加一个无密码条目。使用sudo visudo,添加以下内容:

root1        ALL=(ALL:ALL)   NOPASSWD: /bin/systemctl start ssh.service

每当我授予特定的 sudo 命令访问权限时,我总是使用完整路径,因此请检查您的系统以确保路径systemctl位于何处。

现在,如果您决定稍后添加到此脚本(尽管我不推荐这样做),您可以将 sudo 条目更改为此

root1        ALL=(ALL:ALL)   NOPASSWD: /home/root1/ssh.sh

然后从任何命令中删除 sudo。

相关内容