Сервер Ubuntu автоматически вставляет пароль с помощью 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 в 15:21

10 ответов

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

Это правильный способ запуска программы python как root:

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())

И метод четкого текста: [ ! d4] Это опасно. Ваш пароль будет видимым для пользователей в системе в ясности. Будьте внимательны, пароли никогда не должны храниться нигде, никогда.

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.

2
ответ дан 25 May 2018 в 22:05
  • 1
    Отличный ответ, Стефано. Как вы говорите, заставляя пользователя вводить свой пароль sudo вместо жесткого кодирования, это намного лучше, чем использование sudo-in-script. – Oli♦ 15 April 2011 в 15:47
  • 2
    Если я использую метод getpass, безопасно ли для python вводить его автоматически или это все равно будет считаться опасным? Спасибо за прекрасный ответ - Eden Crow – Eden Crow 15 April 2011 в 15:54
  • 3
    @Eden нет, это все равно будет опасно. Но я добавил еще одно решение, которое должно делать именно то, что вы хотите. Вместо того, чтобы сообщать пользователю запускать скрипт как root, он запускается как root, если его еще нет. – Stefano Palazzo♦ 15 April 2011 в 16:03
  • 4
    @Stefano Спасибо! Попытка реализовать его в моей программе сейчас ... – Eden Crow 15 April 2011 в 16:10
  • 5
    @Stefano Я все время получаю ошибку " name 'sys' не определен " при использовании последнего решения. Что я делаю не так. Спасибо (и я не смогу сразу ответить, так как теперь нужно идти куда-то). – Eden Crow 15 April 2011 в 16:46

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

Это правильный способ запуска программы python как root:

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())

И метод четкого текста: [ ! d4] Это опасно. Ваш пароль будет видимым для пользователей в системе в ясности. Будьте внимательны, пароли никогда не должны храниться нигде, никогда. 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.

2
ответ дан 25 July 2018 в 22:13

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

Это правильный способ запуска программы python как root:

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())

И метод четкого текста: [ ! d4] Это опасно. Ваш пароль будет видимым для пользователей в системе в ясности. Будьте внимательны, пароли никогда не должны храниться нигде, никогда. 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.

2
ответ дан 26 July 2018 в 19:43

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

Это правильный способ запуска программы python как root:

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())

И метод четкого текста: [ ! d4] Это опасно. Ваш пароль будет видимым для пользователей в системе в ясности. Будьте внимательны, пароли никогда не должны храниться нигде, никогда. 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.

2
ответ дан 31 July 2018 в 13:04

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

Это правильный способ запуска программы python как root:

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())

И метод четкого текста: [ ! d4] Это опасно. Ваш пароль будет видимым для пользователей в системе в ясности. Будьте внимательны, пароли никогда не должны храниться нигде, никогда. 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.

2
ответ дан 2 August 2018 в 03:41

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

Это правильный способ запуска программы python как root:

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())

И метод четкого текста: [ ! d4] Это опасно. Ваш пароль будет видимым для пользователей в системе в ясности. Будьте внимательны, пароли никогда не должны храниться нигде, никогда. 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.

2
ответ дан 4 August 2018 в 19:44

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

Это правильный способ запуска программы python как root:

  import os import sys import subprocess def  main (): status, output = subprocess.getstatusoutput («apt-get update») возвращает статус, если __name__ == '__main__': if os.getuid (): print («Эта программа должна запускаться с привилегиями root»,  ) print («пожалуйста, используйте` sudo ./ {0} `, чтобы выполнить его .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 = 'Пароль:')  [!d1  5] 

Это не будет печатать пароль, как на экране во время ввода пользователем, как и следовало ожидать в системе Linux.


  import os import sys import  subprocess def main (): print («hello world, we are root!») return 0 if __name__ == '__main__': if os.getuid (): os.system ("sudo python3" + '' .join (  sys.argv)) sys.exit (100) else: sys.exit (main ())  

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

2
ответ дан 6 August 2018 в 03:48

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

Это правильный способ запуска программы python как root:

  import os import sys import subprocess def  main (): status, output = subprocess.getstatusoutput («apt-get update») возвращает статус, если __name__ == '__main__': if os.getuid (): print («Эта программа должна запускаться с привилегиями root»,  ) print («пожалуйста, используйте` sudo ./ {0} `, чтобы выполнить его .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 = 'Пароль:')  [!d1  5] 

Это не будет печатать пароль, как на экране во время ввода пользователем, как и следовало ожидать в системе Linux.


  import os import sys import  subprocess def main (): print («hello world, we are root!») return 0 if __name__ == '__main__': if os.getuid (): os.system ("sudo python3" + '' .join (  sys.argv)) sys.exit (100) else: sys.exit (main ())  

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

2
ответ дан 7 August 2018 в 21:44

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

Это правильный способ запуска программы python как root:

  import os import sys import subprocess def  main (): status, output = subprocess.getstatusoutput («apt-get update») возвращает статус, если __name__ == '__main__': if os.getuid (): print («Эта программа должна запускаться с привилегиями root»,  ) print («пожалуйста, используйте` sudo ./ {0} `, чтобы выполнить его .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 = 'Пароль:')  [!d1  5] 

Это не будет печатать пароль, как на экране во время ввода пользователем, как и следовало ожидать в системе Linux.


  import os import sys import  subprocess def main (): print («hello world, we are root!») return 0 if __name__ == '__main__': if os.getuid (): os.system ("sudo python3" + '' .join (  sys.argv)) sys.exit (100) else: sys.exit (main ())  

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

2
ответ дан 10 August 2018 в 09:58

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

Это правильный способ запуска программы python как root:

  import os import sys import subprocess def  main (): status, output = subprocess.getstatusoutput («apt-get update») возвращает статус, если __name__ == '__main__': if os.getuid (): print («Эта программа должна запускаться с привилегиями root»,  ) print («пожалуйста, используйте` sudo ./ {0} `, чтобы выполнить его .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 = 'Пароль:')  [!d1  5] 

Это не будет печатать пароль, как на экране во время ввода пользователем, как и следовало ожидать в системе Linux.


  import os import sys import  subprocess def main (): print («hello world, we are root!») return 0 if __name__ == '__main__': if os.getuid (): os.system ("sudo python3" + '' .join (  sys.argv)) sys.exit (100) else: sys.exit (main ())  

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

2
ответ дан 13 August 2018 в 16:17
  • 1
    Отличный ответ, Стефано. Как вы говорите, заставляя пользователя вводить пароль sudo вместо жесткого кодирования, это намного лучше, чем использование sudo-in-script. – Oli♦ 15 April 2011 в 15:47
  • 2
    Если я использую метод getpass, безопасно ли для python вводить его автоматически или это все равно будет считаться опасным? Спасибо за прекрасный ответ - Eden Crow – Eden Crow 15 April 2011 в 15:54
  • 3
    @Eden нет, это все равно будет опасно. Но я добавил еще одно решение, которое должно делать именно то, что вы хотите. Вместо того, чтобы сообщать пользователю запускать скрипт как root, он запускается как root, если его еще нет. – Stefano Palazzo♦ 15 April 2011 в 16:03
  • 4
    @Stefano Спасибо! Попытка реализовать его в моей программе сейчас ... – Eden Crow 15 April 2011 в 16:10
  • 5
    @Stefano Я все время получаю ошибку & quot; name 'sys' не определен & quot; при использовании последнего решения. Что я делаю не так. Спасибо (и я не смогу сразу ответить, так как теперь нужно идти куда-то). – Eden Crow 15 April 2011 в 16:46

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

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