Ubuntu Server inserisce automaticamente la password usando Python3

4

Sto provando a creare un piccolo programma python3 per il mio amico che installerà e configurerà il set nessarcary per il suo server Ubuntu.

Voglio che sia in grado di avviare il programma, fornire alcune informazioni di base ed essere in grado di lasciare il programma per l'esecuzione.

Il fatto è che per fare questo ho bisogno del file python per inviare la password al CL quando richiesto per i comandi sudo.

Ho provato a farlo per aggiornare il server Ubuntu:

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

Dopo aver richiesto al programma la password con questo:

password=input('Please Enter Your Password')

Ma non ha funzionato. Il CL si trova lì in attesa che l'utente inserisca la password manualmente. C'è comunque un modo per aggirare questo?

Grazie!

    
posta Eden Crow 15.04.2011 - 12:21

1 risposta

2

Ci sono alcune soluzioni che inseriscono la password automaticamente, ma poiché sono visibili in chiaro per un momento, quelle sono pericolose e non dovresti usarle. Alcuni metodi sono discussi qui .

Questo è il modo corretto di eseguire un programma python come 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())

E il metodo di testo chiaro:

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

In una nota correlata, il modo migliore per richiedere a un utente di immettere una password è l'uso di getpass:

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

Questo non stamperà la password sullo schermo mentre l'utente sta digitando, come ci si aspetterebbe su un sistema 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())

Questa soluzione, invece di chiedere all'utente, esegue se stessa come root, se necessario.

    
risposta data Stefano Palazzo 15.04.2011 - 12:30

Leggi altre domande sui tag