AlexS
La respuesta ajustada (que ahora la estoy usando en producción) sería:
def sudo_run_commands_remote(command, server_address, server_username, server_pass, server_key_file):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=server_address,
username=server_username,
password=server_pass,
key_filename=server_key_file)
session = ssh.get_transport().open_session()
session.set_combine_stderr(True)
session.get_pty()
session.exec_command("sudo bash -c \"" + command + "\"")
stdin = session.makefile('wb', -1)
stdout = session.makefile('rb', -1)
stdin.write(server_pass + '\n')
stdin.flush()
print(stdout.read().decode("utf-8"))
Elimine la parte key_filename
del método connect
si no utiliza un archivo de clave y, por el contrario, si solo utiliza una clave sin contraseña, elimine la parte password
.
Algunas notas sobre esto es que, es multi comando. Lo que significa que se está ejecutando un bash
como root
por lo que puede hacer tantos comandos como pueda en una sola ejecución con solo separarlos con ;
.
¿Por qué no utilizar setuid http://en.wikipedia.org/wiki/Setuid? –