Answers:
请注意:任何涉及将登录密码以纯文本,命令或文件形式放置的方法都是不安全的,不应使用!
正确的安装方法sudo
是只echo date... > rtc...
允许您需要的一个特定命令(即)运行而无需输入密码。
gedit
(或您喜欢的编辑器),然后创建脚本,例如pydatertc.sh
回声日期\'+%s \'-d \'+ 24小时\'> / sys / class / rtc / rtc0 / wakealarm
sudo chown root:root /home/username/pydatertc.sh
sudo chmod 700 /home/username/pydatertc.sh
pydatertc.sh
为无需密码即可执行sudo visudo
在终端上键入以打开sudo权限(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 "...."
保持原样。
sudo
。因此,它是更安全把脚本到一个目录只有root可以改变,例如:/ usr / sbin目录或/根。否则,它是LGTM。
警告!
将登录密码以纯文本形式放在命令或文件中非常不安全,并且可能会损害您的私人数据和系统。这是强烈建议从来没有做到这一点,即使你认为你的系统是“个人”或一个“安全的地方”!
如果该脚本仅供个人使用,并且已将其放置在安全的地方,并且您不担心自己的帐户被盗,那么这是一个简单的解决方案:
echo LOGINPASSWD | sudo -S COMMAND HERE
其中LOGINPASSWD是您的登录密码(例如:iloveponies),而COMMAND HERE是sudo后的命令,例如sh -c“ echo da ..等
如果您不介意在某个小时(或白天)在特定时间运行该脚本,请将其放在根目录的主目录(/root
)中,然后/etc/crontab
以root身份从系统crontab()运行该脚本。这样,您就不必破坏您的安全性。
有关如何将脚本添加到crontab的信息,请参见https://help.ubuntu.com/community/CronHowto。
anacron
不是全天候24x7运行的台式机/笔记本电脑,则可能要使用
sudo的另一个与之相关的出色功能(在上面的出色答案中并未提及)是'timestamp_timeout'变量。它是一个sudo变量,您可以增加此变量以保存在交互式密码键入中。
例如,在/ etc / sudoers(或其中包含的文件之一)中,您可以修改默认值:
# only require a password once every 60 minutes
Defaults timestamp_timeout=60
来自“ man sudoers”的完整描述:
timestamp_timeout
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运行命令的特定情况下无济于事。但这是一件好事,要意识到。
export MY_SUDO_PASS="user_password_here"
要测试它是否正常工作,请输入:
echo $MY_SUDO_PASS
> user_password_here
要运行“ sudo apt-get update”,并接受我们之前创建的环境变量的密码:
echo $MY_SUDO_PASS | sudo -S apt-get update
从python运行(示例将目录所有权递归更改为username_here):
python
>> import subprocess
>> subprocess.call('echo $MY_SUDO_PASS | sudo -S chown -R username_here /home/username_here/folder_to_change_ownership_recursivley', shell=True)
echo $ MY_SUDO_PASS get的密码-S开关将其捕获并将密码传递给sudo