Cómo hacer un comando sudo usando Paramiko

Estoy teniendo algunos problemas con los comandos que tienen sudo usando paramiko
f.ex sudo apt-get update

Aquí está mi código:

try: import paramiko except: try: import paramiko except: print "There was an error with the paramiko module" cmd = "sudo apt-get update" ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: ssh.connect("ip",username="lexel",password="password") print "succesfully conected" except: print "There was an Error conecting" stdin, stdout, stderr = ssh.exec_command(cmd) stdin.write('password\n') stdin.flush() print stderr.readlines() print stdout.readlines() 

Este es un código rápido. Sé que necesito agregar sys.exit (1) y todo eso, pero esto es solo para demostrarlo.

Utilicé esto para referencia: Jessenoller.com

Fabric tiene comando sudo . Utiliza Paramico para conexiones ssh. Tu código sería:

 #fabfile.py from fabric.api import run, sudo def update(): """Run `sudo apt-get update`. lorem ipsum """ sudo("apt-get update") def hostname(): """Run `hostname`""" run("hostname") 

Uso:

 $ fab update -H example.com [example.com] Executing task 'update' [example.com] sudo: apt-get update ...snip... [example.com] out: Reading package lists... Done [example.com] out: Done. Disconnecting from example.com... done. $ fab --display update Displaying detailed information for task 'update': Run `sudo apt-get update`. lorem ipsum $ fab --list Available commands: hostname Run `hostname` update Run `sudo apt-get update`. 

De los documentos :

Además del uso a través de la herramienta fab, los componentes de Fabric se pueden importar a otro código de Python, proporcionando una interfaz Pythonic al conjunto de protocolos SSH a un nivel más alto que el proporcionado por ejemplo, por Paramiko (que Fabric utiliza).

Estaba teniendo el mismo problema, y ​​soluciono con esto:

En su archivo sudo, simplemente agregue esto:

Valores predeterminados: nombre_de_usuario! Requiretty

o eliminar los valores predeterminados requiretty.

También asegúrese de que su usuario tenga permiso para ejecutar el comando con sudo.