Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不询问密码的情况下运行Python脚本?_Python - Fatal编程技术网

如何在不询问密码的情况下运行Python脚本?

如何在不询问密码的情况下运行Python脚本?,python,Python,我正试着在需要的时候打开我的系统。因此,我正在使用以下命令,这些命令运行成功。但是当我运行代码时,它会询问我的密码,每次我都必须手动提供密码 os.system('sudo sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"' % locals()) os.system('sudo sh -c "echo %(turnontime)s > /sys/class/rtc/rtc0/wakealarm"' % locals())

我正试着在需要的时候打开我的系统。因此,我正在使用以下命令,这些命令运行成功。但是当我运行代码时,它会询问我的密码,每次我都必须手动提供密码

os.system('sudo sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"' % locals())     
os.system('sudo sh -c "echo %(turnontime)s > /sys/class/rtc/rtc0/wakealarm"' % locals())    

如何运行此代码而不询问密码?

sudo
使用
-S
选项运行时,将从stdin读取密码

在这种情况下,您可以在脚本中使用它,如:

#!/bin/bash
echo my_awesome_password | sudo -S python awesome_script.py

正如@david正确地说的,为什么要使用python来执行系统调用呢?您可能有相同的脚本执行相同的操作。

sudo
使用
-S
选项运行时,将从stdin读取密码

在这种情况下,您可以在脚本中使用它,如:

#!/bin/bash
echo my_awesome_password | sudo -S python awesome_script.py

正如@david正确地说的,为什么要使用python来执行系统调用呢?您可能会让同一个脚本执行同样的操作。

在脚本文件中包含根密码是非常愚蠢的。别这么做,还有更好的选择。页面描述了如何使用位集生成shell脚本,以及如何绕过大多数现代Linux发行版对shell脚本上的setuid的限制

我将根据stackoverflow指南总结这里的主要部分。首先制作一个
.c
文件(假设它名为
runscript.c
),包含以下内容:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/path/to/script.sh" ); 

   return 0;
}
现在,作为root,键入

chown root:root runscript script.sh
chmod 4755 runscript script.sh
现在,任何用户都应该能够运行
runscript
,它将像root用户一样执行
script.sh

只要这两个文件都归root所有,并且不能由root以外的任何人写入,这是相当安全的,并且比在脚本文件中以明文形式嵌入root密码要安全得多


由于某种原因,我没有成功地为
script.py
文件执行此操作,因此如果您真的想运行python脚本,请让
script.sh
文件间接运行它。如果这样做,请记住也要使用上面的
chown
chmod
设置python脚本的所有者和权限。

在脚本文件中使用根密码简直是愚蠢透顶。别这么做,还有更好的选择。页面描述了如何使用位集生成shell脚本,以及如何绕过大多数现代Linux发行版对shell脚本上的setuid的限制

我将根据stackoverflow指南总结这里的主要部分。首先制作一个
.c
文件(假设它名为
runscript.c
),包含以下内容:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/path/to/script.sh" ); 

   return 0;
}
现在,作为root,键入

chown root:root runscript script.sh
chmod 4755 runscript script.sh
现在,任何用户都应该能够运行
runscript
,它将像root用户一样执行
script.sh

只要这两个文件都归root所有,并且不能由root以外的任何人写入,这是相当安全的,并且比在脚本文件中以明文形式嵌入root密码要安全得多


由于某种原因,我没有成功地为
script.py
文件执行此操作,因此如果您真的想运行python脚本,请让
script.sh
文件间接运行它。如果执行此操作,请记住也要使用上面的
chown
chmod
设置python脚本的所有者和权限。

sudo命令将为您提供root权限,并且需要您的密码。在没有密码的情况下给root用户访问权限是一个非常非常糟糕的主意。还有,为什么要使用Python?它只是在进行系统调用。您最好只使用shell脚本。Dude,我可以理解sudo命令将授予root权限,但我知道通过supprocess.call()将从一个变量获取密码(需要定义变量的密码)系统会自动读取。但我不知道该如何声明。这个问题已经问了很多次,所以很难找到正确的答案(可能是因为这不是一个编程问题,应该在unix.stackexchange.com上)。查看sudoers文件,查找将在不需要密码的情况下使用sudo运行的命令。
sudo
命令将为您提供root权限,并且需要您的密码才能执行此操作。在没有密码的情况下给root用户访问权限是一个非常非常糟糕的主意。还有,为什么要使用Python?它只是在进行系统调用。您最好只使用shell脚本。Dude,我可以理解sudo命令将授予root权限,但我知道通过supprocess.call()将从一个变量获取密码(需要定义变量的密码)系统会自动读取。但我不知道该如何声明。这个问题已经问了很多次,所以很难找到正确的答案(可能是因为这不是一个编程问题,应该在unix.stackexchange.com上)。查看sudoers文件中的命令,这些命令将在不需要密码的情况下与sudo一起运行。