O servidor Ubuntu automaticamente insere a senha usando o Python3

4

Estou tentando criar um pequeno programa python3 para o meu amigo, que instalará e configurará a configuração do nessarcary para seu servidor Ubuntu.

Eu quero que ele seja capaz de iniciar o programa, dar algumas informações básicas e poder deixar o programa rodando.

A coisa é que, para fazer isso, eu preciso do arquivo python para enviar a senha para o CL quando solicitado pelos comandos do sudo.

Eu tentei fazer isso para atualizar o servidor Ubuntu:

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

Depois de ter o programa, solicite a senha com isto:

password=input('Please Enter Your Password')

Mas não funcionou. O CL apenas fica lá esperando que o usuário insira a senha manualmente. Existe alguma maneira de contornar isso?

Obrigado!

    
por Eden Crow 15.04.2011 / 12:21

1 resposta

2

Existem algumas soluções que colocam a senha automaticamente, mas como elas são visíveis em texto não criptografado por um momento, elas são perigosas e você não deve usá-las. Alguns métodos são discutidos aqui .

Esta é a maneira correta de executar um programa python como 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 o método de texto claro:

This is dangerous Your password will be visible to users on the system in the clear Be advised, passwords should never be stored anywhere, ever.

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

Em uma nota relacionada, a melhor maneira de solicitar uma senha ao usuário é usando o getpass:

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

Isso não imprimirá a senha como na tela enquanto o usuário estiver digitando, como seria de se esperar em um 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())

Esta solução, em vez de perguntar ao usuário, é executada como raiz, se necessário.

    
por Stefano Palazzo 15.04.2011 / 12:30