我想每天自动打开我的系统。所以我在我的 Python 脚本中使用以下代码,但sudo
每次都要求我输入密码:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
Run Code Online (Sandbox Code Playgroud)
如何在不sudo
要求每次输入密码的情况下运行此脚本?
ish*_*ish 162
请注意:任何涉及将您的登录密码以纯文本、命令或文件形式输入的方法都是不安全的,不应使用!
正确的设置方法sudo
是只echo date... > rtc...
允许您需要的一个特定命令,即,无需密码即可运行。
gedit
(或您最喜欢的编辑器),然后创建脚本,例如pydatertc.sh
echo date \'+%s\' -d \'+ 24 hours\' > /sys/class/rtc/rtc0/wakealarm
sudo chown root:root /home/username/pydatertc.sh
sudo chmod 700 /home/username/pydatertc.sh
Run Code Online (Sandbox Code Playgroud)pydatertc.sh
在不需要密码的情况下执行sudo visudo
在终端打开须藤权限(sudoers
)文件%sudo ALL=(ALL:ALL) ALL
username
您的用户名在哪里:
用户名 ALL=(ALL) NOPASSWD: /home/username/pydatertc.sh
pydatertc.sh
os.system('sudo /home/username/pydatertc.sh')
现在,您的脚本应该无需密码即可运行,并且不会危及您的帐户、数据或系统的安全性!
wakealarm
(不用于一般用途!):仅在这种特定情况下,由于该/sys/class/rtc/rtc0/wakealarm
文件仅控制系统的唤醒警报并且在其他方面是无害的,因此避免密码的另一种选择是获取该文件的所有权chown
(如果您是唯一设置警报的用户) , 或者使用chmod +666
; 在这种情况下,只需sudo
从 Python 调用中删除,保持sh -c "...."
原样。
hyt*_*omo 31
警告!
将您的登录密码以纯文本形式放在命令或文件中是非常不安全的,可能会危及您的私人数据和系统。这是强烈建议从来没有做到这一点,即使你认为你的系统是“个人”或一个“安全的地方”!
如果脚本仅供个人使用,并且您已将其放置在安全的地方,并且您不担心您的帐户被盗等,那么这里有一个简单的解决方案:
echo LOGINPASSWD | sudo -S COMMAND HERE
Run Code Online (Sandbox Code Playgroud)
其中 LOGINPASSWD 是您的登录密码(例如:iloveponies)而 COMMAND HERE 是您在 sudo 之后的命令,例如 sh -c "echo da.. 等
z7s*_*7sg 21
如果您不介意在特定时间(或白天)/root
运行脚本,请将其放在 root 的主目录 ( ) 中,然后/etc/crontab
以 root 身份从系统 crontab ( )运行脚本。这样您就不必牺牲安全性。
有关如何将脚本添加到 crontab 的信息,请参阅https://help.ubuntu.com/community/CronHowto。
ari*_*ica 11
在上面的优秀答案中没有提到的 sudo 的另一个相关的好特性是 'timestamp_timeout' 变量。它是一个 sudo 变量,您可以增加它以节省交互式密码输入。
例如,在 /etc/sudoers(或其中包含的文件之一)中,您可以修改默认值:
# only require a password once every 60 minutes
Defaults timestamp_timeout=60
Run Code Online (Sandbox Code Playgroud)
来自'man sudoers'的完整描述:
时间戳超时
Run Code Online (Sandbox Code Playgroud)Number of minutes that can elapse before sudo will ask for a passwd again. The default is 5, set this to 0 to always prompt for a password.
当然,这在从 cron 运行命令的特定情况下无济于事。但了解这一点是件好事。