Ubuntu Server автоматически вставляет пароль с помощью Python3

Я пытаюсь создать небольшую программу на python3 для моего друга, которая установит и настроит настройку nessarcary для его сервера Ubuntu.

Я хочу, чтобы он мог запустить программу, дать некоторую основную информацию и иметь возможность просто оставить программу для запуска.

Дело в том, что для этого мне нужен файл python для отправки пароля к CL при запросе команд sudo.

Я попытался сделать это для обновления сервера Ubuntu:

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

После того, как программа запросила пароль с этим:

password=input('Please Enter Your Password')

Но это не сработало. CL просто сидит и ждет, когда пользователь введет пароль вручную. В любом случае, можно ли обойти это?

Спасибо!

4
задан 15 April 2011 в 14:21

1 ответ

Существуют некоторые решения, которые вставляют пароль автоматически, но поскольку они видимы в открытом тексте на мгновение, это опасно, и Вы не должны использовать их. Некоторые методы обсуждены здесь.

Это - надлежащий способ запустить программу 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())

Это решение, вместо того, чтобы спросить пользователя, выполняет себя как корень при необходимости.

2
ответ дан 15 April 2011 в 14:21

Другие вопросы по тегам:

Похожие вопросы: