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은 재부팅 시 쉘 스크립트를 실행합니다.

그러나 "root1 (ALL : ALL) NOPASSWD: /home/root1/ssh.sh"를 사용하면 재부팅 시 쉘 스크립트가 작동하지 않으며 수동으로 실행하더라도 비밀번호를 묻는 메시지가 표시됩니다.

답변1

그것을 설정루트의 크론탭사용자 crontab 대신:

$ sudo crontab -e

편집기가 열리면 명령을 추가하십시오 . 명령을 @reboot입력하지 마십시오 .sudocrontab

노트: crontab일부를 사용하는 한 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를 제거하십시오.

관련 정보