How to run sudo with Paramiko? (Python)
check this example out:
ssh.connect('127.0.0.1', username='jesse', password='lol')stdin, stdout, stderr = ssh.exec_command( "sudo dmesg")stdin.write('lol\n')stdin.flush()data = stdout.read.splitlines()for line in data: if line.split(':')[0] == 'AirPort': print line
Example found here with more explanations:http://jessenoller.com/2009/02/05/ssh-programming-with-paramiko-completely-different/
Hope it helps!
invoke_shell
worked for me like this:
import paramiko, getpass, re, timessh_client = paramiko.SSHClient() ssh_client.connect( host )sudo_pw = getpass.getpass("sudo pw for %s: " % host)command = "sudo magicwand"channel = ssh_client.invoke_shell() channel.send( command ) # wait for prompt while not re.search(".*\[sudo\].*",channel.recv(1024)): time.sleep(1)channel.send( "%s\n" % sudo_pw )
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 ;
.