मुझे नहीं लगता कि मैंने किसी को यह सुझाव दिया है और ओपी ने सिर्फ "स्क्रिप्ट" कहा है ...
मुझे उसी समस्या को हल करने की आवश्यकता थी और मेरी सबसे आरामदायक भाषा पायथन है।
मैंने पैरामिको लाइब्रेरी का इस्तेमाल किया। इसके अलावा, मुझे उन कमांड्स को भी जारी करने की आवश्यकता है जिनके लिए मुझे उपयोग की जाने वाली अनुमतियों की आवश्यकता होगी sudo
। यह पता चला है कि sudo "-S" झंडे के माध्यम से अपना पासवर्ड स्वीकार कर सकता है! निचे देखो:
import paramiko
ssh_client = paramiko.SSHClient()
# To avoid an "unknown hosts" error. Solve this differently if you must...
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# This mechanism uses a private key.
pkey = paramiko.RSAKey.from_private_key_file(PKEY_PATH)
# This mechanism uses a password.
# Get it from cli args or a file or hard code it, whatever works best for you
password = "password"
ssh_client.connect(hostname="my.host.name.com",
username="username",
# Uncomment one of the following...
# password=password
# pkey=pkey
)
# do something restricted
# If you don't need escalated permissions, omit everything before "mkdir"
command = "echo {} | sudo -S mkdir /var/log/test_dir 2>/dev/null".format(password)
# In order to inspect the exit code
# you need go under paramiko's hood a bit
# rather than just using "ssh_client.exec_command()"
chan = ssh_client.get_transport().open_session()
chan.exec_command(command)
exit_status = chan.recv_exit_status()
if exit_status != 0:
stderr = chan.recv_stderr(5000)
# Note that sudo's "-S" flag will send the password prompt to stderr
# so you will see that string here too, as well as the actual error.
# It was because of this behavior that we needed access to the exit code
# to assert success.
logger.error("Uh oh")
logger.error(stderr)
else:
logger.info("Successful!")
आशा है कि यह किसी की मदद करता है। मेरा उपयोग मामला एक समय के रूप में ~ 300 सर्वरों पर निर्देशिका, भेजने और अनट्रेगिंग फाइलें बनाने और प्रोग्राम शुरू करने का था। जैसे, स्वचालन सर्वोपरि था। मैंने कोशिश की sshpass
, expect
और फिर इस के साथ आया।