Ubuntu 服务器使用 Python3 自动输入密码

Ubuntu 服务器使用 Python3 自动输入密码

我正在尝试为我的朋友创建一个小型 python3 程序,该程序将安装并配置他 Ubuntu 服务器所需的设置。

我希望他能够启动该程序,提供一些基本信息,然后就可以运行该程序。

问题是,要做到这一点,我需要 python 文件在请求 sudo 命令时将密码发送给 CL。

我尝试这样做来更新 Ubuntu 服务器:

os.system('sudo aptitude update && sudo aptitude dist-upgrade')
os.system(password)

让程序使用以下命令请求密码后:

password=input('Please Enter Your Password')

但它不起作用。CL 只是在那里等待用户手动输入密码。有什么办法可以解决这个问题吗?

谢谢!

答案1

有一些解决方案可以自动输入密码,但由于它们会暂时以明文形式显示,因此很危险,您不应该使用它们。讨论了一些方法这里

这是以 root 身份运行 Python 程序的正确方法:

import os
import sys
import subprocess


def main():
    status, output = subprocess.getstatusoutput("apt-get update")
    return status


if __name__ == '__main__':
    if os.getuid():
        print("This program needs to be run with root privileges,")
        print("please use `sudo ./{0}` to execute it".format(*sys.argv))
        sys.exit(100)
    else:
        sys.exit(main())

明文方法如下:

这是危险的 系统上的用户将可以看到您的密码很清楚 请注意,密码永远不应该存储在任何地方。

password = "password1"
subprocess.getstatusoutput(
    "echo {} | sudo -S apt-get update".format(password))

相关提示:提示用户输入密码的最佳方式是使用 getpass:

import getpass
password = getpass.getpass(prompt='Password: ')

这不会像在 Linux 系统上所期望的那样在用户输入时在屏幕上打印密码。


import os
import sys
import subprocess


def main():
    print("hello world, we're root!")
    return 0


if __name__ == '__main__':
    if os.getuid():
        os.system("sudo python3 " + ' '.join(sys.argv))
        sys.exit(100)
    else:
        sys.exit(main())

此解决方案无需询问用户,而是在必要时以 root 身份运行。

相关内容