का उपयोग कर paramiko पर sudo आदेशों को लागू करने में सक्षम था के लिए समय AlexS
ठीक ट्यून किए गए उत्तर (जिसे मैं अब उत्पादन में उपयोग कर रहा हूं) होगा:
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"))
connect
विधि के key_filename
हिस्सा निकालें यदि आप एक कुंजी फ़ाइल का उपयोग करें और इसके विपरीत में यदि आप केवल पासवर्ड के बिना एक कुंजी का उपयोग करें, password
हिस्से को हटाने नहीं है।
इसके बारे में कुछ नोट्स यह है कि, यह बहु कमांड सक्षम है। मतलब यह है कि bash
root
के रूप में चल रहा है, ताकि आप एक ही रन में जितना कमांड कर सकें, उन्हें ;
से अलग कर सकते हैं।
क्यों सेटुइड का उपयोग नहीं करें http://en.wikipedia.org/wiki/Setuid? "sudo: कोई tty वर्तमान और कोई askpass कार्यक्रम निर्दिष्ट" अपने sudoer एक पासवर्ड है, हालांकि की आवश्यकता है –