python - পাইথন প্যারামিকো এক্সিকিউটিভ_কমান্ড ব্যবহার করে মৃত্যুদণ্ড কার্যকর করার সময় কিছু ইউনিক্স কমান্ড “<কম্যান্ড> পাওয়া যায় নি” দিয়ে ব্যর্থ হয়



shell ssh (1)

ডিফল্টরূপে SSHClient.exec_command "লগইন" মোডে শেল চালায় না এবং সেশনের জন্য সিউডো টার্মিনাল বরাদ্দ করে না। ফলস্বরূপ আপনার নিয়মিত ইন্টারেক্টিভ এসএসএইচ অধিবেশন ব্যতীত স্টার্টআপ স্ক্রিপ্টগুলির একটি আলাদা সেটটি (সম্ভবত) অ-ইন্টারেক্টিভ সেশনগুলির জন্য। এবং / অথবা স্ক্রিপ্টগুলিতে বিভিন্ন শাখা নেওয়া হয়, TERM পরিবেশ পরিবর্তনশীলের অনুপস্থিতি / উপস্থিতির ভিত্তিতে।

সম্ভাব্য সমাধান (অগ্রাধিকার ক্রমে):

  1. নির্দিষ্ট পরিবেশের উপর নির্ভর না করার জন্য কমান্ডটি ঠিক করুন। কমান্ডে sesu করার জন্য একটি সম্পূর্ণ পথ ব্যবহার করুন। উদাহরণ:

    /bin/sesu test

    সাধারণ * নিক্স সিস্টেমে আপনি যদি পুরো পথটি জানেন না, আপনি নিজের ইন্টারেক্টিভ এসএসএইচ সেশনে which sesu কমান্ডটি ব্যবহার করতে পারেন।

  2. ইন্টারেক্টিভ এবং অ-ইন্টারেক্টিভ উভয় সেশনের জন্য PATH একই সেট করতে আপনার স্টার্টআপ স্ক্রিপ্টগুলি ঠিক করুন।

  3. স্ক্রিপ্টটি লগইন শেলের মাধ্যমে স্পষ্টভাবে চালনার চেষ্টা করুন (সাধারণ * নিক্স শেল সহ --login স্যুইচ ব্যবহার করুন):

    bash --login -c "sesu test"
  4. যদি কমান্ড নিজেই একটি নির্দিষ্ট পরিবেশ সেটআপের উপর নির্ভর করে এবং আপনি প্রারম্ভিক স্ক্রিপ্টগুলি ঠিক করতে না পারেন, আপনি কমান্ডের মধ্যেই পরিবেশ পরিবর্তন করতে পারেন। এর জন্য সিনট্যাক্স নির্ভর করে দূরবর্তী সিস্টেম এবং / অথবা শেলের উপর। সাধারণ * নিক্স সিস্টেমে এটি কাজ করে:

    PATH="$PATH;/path/to/sesu" && sesu test
  5. আরেকটি (প্রস্তাবিত নয়) পদ্ধতির হ'ল .setPty পদ্ধতি ব্যবহার করে " .setPty " চ্যানেলের জন্য সিউডো টার্মিনাল বরাদ্দকে বাধ্য করা:

    stdin,stdout,stderr=ssh.exec_command('sesu test', get_pty=True)

    কমান্ড এক্সিকিউশনটি স্বয়ংক্রিয় করতে সিউডো টার্মিনালটি ব্যবহার করা আপনাকে বাজে পার্শ্ব প্রতিক্রিয়া আনতে পারে। উদাহরণস্বরূপ দেখুন জাঙ্ক মানগুলি থেকে মুক্তি পাওয়ার কী সহজ উপায় আছে যখন আপনি যখন পাইথনের প্যারামিকো লাইব্রেরি ব্যবহার করে এসএসএইচ ব্যবহার করেন এবং কোনও দূরবর্তী মেশিনের সি এল এল থেকে আউটপুট আনেন?

আরো দেখুন:

  • প্যারামিকো ব্যবহার করার সময় পরিবেশের পরিবর্তনশীল পার্থক্য
  • JSch ব্যবহার করে জাভা দিয়ে মৃত্যুদণ্ড কার্যকর করা হলে নির্দিষ্ট ইউনিক্স কমান্ডগুলি "... পাওয়া যায়নি" এর সাথে ব্যর্থ হয়

আমি sesu এক্সিকিউট_কমন্ডের exec_command পাইথন থেকে ইউনিক্স সার্ভারে sesu কমান্ড চালানোর চেষ্টা করছি। তবে আমি যখন এই আদেশটি exec_command('sesu test') , আমি পাচ্ছি

sh: sesu: পাওয়া গেল না

যখন আমি সাধারণ ls কমান্ড চালাচ্ছি এটি আমাকে পছন্দসই আউটপুট দেয়। কেবল sesu কমান্ড দিয়ে এটি sesu কাজ করছে না।

আমার কোডটি কেমন দেখাচ্ছে:

import paramiko

host = host
username = username
password = password
port = port

ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port,username,password)
stdin,stdout,stderr=ssh.exec_command('sesu test')
stdin.write('Password')
stdin.flush()
outlines=stdout.readlines()
resp=''.join(outlines)
print(resp)




paramiko