কোনও ব্যাশ স্ক্রিপ্ট কীভাবে লিখবেন, যে জিনিসটি করতে অন্য কোনও মেশিনে লগ হয়?


11

এটি কি কোনও বাশ স্ক্রিপ্ট লেখা সম্ভব?

  1. মেশিন এ থেকে শুরু হবে, এসএসএস দ্বারা আলাদা আলাদা মেশিন বিতে লগ ইন করুন (এ এবং বি উভয় মেশিন লিনাক্স-মেশিন হবে),
  2. মেশিন বিতে কিছু ফাইল অনুলিপি করে
  3. এই মেশিনগুলিতে একটি পাইথন স্ক্রিপ্ট একটি দেওয়া পাইথন স্ক্রিপ্ট চালায়।
  4. ফলাফলগুলি মেশিন এ-তে ফিরিয়ে দেয়
  5. মেশিন বি থেকে লগ অফ।

এটি কি প্রযুক্তিগতভাবে কার্যকর?

উত্তর:


15

অবশ্যই এটি করণীয়:

scp file user@host:
ssh user@host path_to_script
scp user@host:file_to_copy ./

এবং এটাই...

তবে একটি সমস্যা আছে: আপনাকে তিনবার পাসওয়ার্ড চেয়ে নেওয়া হবে। এড়াতে আপনি ssh কী তৈরি করতে এবং এই কীগুলির সাহায্যে ব্যবহারকারীদের অনুমোদিত করতে পারবেন।

Ssh কী রান চালাতে উত্পন্ন করতে ssh-keygen -t rsa, প্রশ্নের উত্তর দিন এবং সরকারী কী ~/.ssh/authorized_keysফাইল করতে অনুলিপি হোস্টে (মেশিন বি) অনুলিপি করুন। ~/.ssh/id_rsaস্থানীয় মেশিনে ( ব্যক্তিগত) কী সংরক্ষণ করতে হবে ।


যদি পাবলিক কীগুলি কোনও বিকল্প না করে আপনি পাসওয়ার্ডের অনুরোধগুলি হ্রাস করতে কিছু অশোধিত কিছু করতে পারেন যেমনcat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results
প্যাট্রিক

আপনি যদি পাসওয়ার্ডটি ব্যবহার করতে চান তবে আপনি সর্বদা ওপেনএসএসএইচ সংযোগ পুলিংটি সংজ্ঞায়িত করে ControlMaster=yesএবং ব্যবহার করতে পারেন ControlPath=/path/to/socketfileএবং তারপরে -fএকটি ব্যাকগ্রাউন্ড এসএস চালানোর জন্য একটি এসএসএস সংযোগ শুরু করতে পারেন। পরবর্তী সমস্ত এসএসএইচ সংযোগগুলিকে একই সকেট ফাইলটি ব্যবহার করতে বলুন।
jsbillings

4

আমি একক sshসংযোগ / সেশনে সবকিছু করা সম্ভব :

ssh user@host "cat > remote_dst; command; cat remote_src" < local_src > local_dst

এই:

  1. কপি local_srcকরার জন্য remote_dst,
  2. কার্যকর command,
  3. কপি remote_srcকরার জন্য local_dst

তবে যদি commandলিখতে থাকে তবে ফলাফলটিও stdoutসাথে থাকবে local_dst। যদি commandইনপুট থেকে পড়া হয় stdin, এটি গ্রহণ করবে এবং EOF


3

আপনি যখন এটি একটি একা ssh অধিবেশনে করতে পারেন, চলমান কমান্ডের সাথে অনুলিপি করা ফাইলগুলি একত্রিত করা কিছুটা জটিল।

এই কাজটি মোকাবেলার সহজতম উপায় হ'ল তিনটি অপারেশনের জন্য পৃথক এসএসএইচ সেশন চালানো:

rsync -a inputs/ machineB:inputs/
ssh machineB 'some command -i inputs -o outputs'
rsync -a machineB:outputs/ outputs/

এর জন্য তিনবার মেশিনবিতে অনুমোদনের প্রয়োজন। একাধিকবার প্রমাণীকরণ এড়াতে প্রস্তাবিত উপায় হ'ল ওপেনএসএইচএইচ এর আধুনিক সংস্করণে সংযোগ ভাগ করে নেওয়ার সুবিধাটি ব্যবহার করুন: বি এর সাথে একবারে মাস্টার সংযোগ শুরু করুন এবং এসএসএইচটিকে স্বয়ংক্রিয়ভাবে সেই মাস্টার সংযোগের উপরে পিগব্যাক দিন। আপনার সাথে একটি লাইন যুক্ত করুন ControlMaster autoএবংControlPath~/.ssh/config তারপরে পটভূমিতে একটি মাস্টার সংযোগ শুরু করুন, তারপরে আপনার কার্য সম্পাদন করুন।

ssh -fN machineB                         # start a master connection in the background
# Subsequent connections will be slaves to the existing master connection
rsync -a inputs/ machineB:inputs/
ssh machineB 'some command -i inputs -o outputs'
rsync -a machineB:outputs/ outputs/

ফাইলগুলি অনুলিপি করতে scp বা rsync ব্যবহার না করে, এসএসএইচএফএসের আওতায় রিমোট ফাইল সিস্টেমটি মাউন্ট করা সহজ হতে পারে । এটি উপায় দ্বারা একটি মাস্টার সংযোগ স্থাপনের যত্ন নেবে (ধরে নিলে আপনি ~/.ssh/configউপরে বর্ণিত হিসাবে সেট আপ করেছেন )।

mkdir /net/machineB
sshfs machineB: /net/machineB
cp -Rp inputs /net/machineB/
ssh machibeB 'some command -i inputs -o outputs'
cp -Rp /net/machineB/outputs .
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.