AlexS
Fine tuned answer (which I am now using it in production) would be:
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"))
Remove the key_filename
part of connect
method if you dont use a key file and in contrast if you only use a key without password, remove the password
part.
Some notes about this is that, it is multi command capable. Meaning that is is running a bash
as root
so you can as much commands as you can in a single run with just separating them with ;
.