আমি মনে করি না যে আমি কাউকে এটির পরামর্শ দিতে দেখেছি এবং ওপি "স্ক্রিপ্ট" তাই বলেছে ...
আমার একই সমস্যাটি সমাধান করা দরকার এবং আমার সবচেয়ে আরামদায়ক ভাষা পাইথন।
আমি প্যারামিকো লাইব্রেরি ব্যবহার করেছি। তদ্ব্যতীত, আমিও বিষয়টি কমান্ড যার জন্য আমি ছড়ানোর অনুমতির প্রয়োজন ব্যবহার করবে করা প্রয়োজন 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
এবং তারপর এই নিয়ে এসেছেন।