ব্যাশে একসাথে ssh এবং sudo কীভাবে ব্যবহার করবেন?


10

এই সুনির্দিষ্ট দৃশ্যের বর্ণনা দেওয়ার মতো কোনও প্রশ্ন আমি খুঁজে পাচ্ছি না।

আমি একাধিক মেশিন থেকে লগিং পুনরুদ্ধার করতে খুব বেসিক বাশ স্ক্রিপ্টটি কার্যকর করার চেষ্টা করছি। আমি স্থানীয়ভাবে স্ক্রিপ্টটি চালাচ্ছি তবে এসএসএসের মাধ্যমে কোনও বাহ্যিক মেশিন অ্যাক্সেস করতে হবে, সেইসাথে সেই মেশিনে একবারে কোনও সুবিধাযুক্ত ব্যবহারকারীর মধ্যে সুডো ...

ssh myuser@machine.net
sudo su  - privledged_user
cat logs > file.txt

Sh -x দিয়ে এটি চালানো ব্যাশটি 'ssh' লাইনে আটকে যাচ্ছে als সুতরাং আমি এটিকে এটি সংশোধন করার চেষ্টা করেছি:

ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt

এটি অনির্দিষ্টকালের জন্য স্থির হয়ে পড়েছে বলে মনে হয়। এই সমস্যার আরও ভাল সমাধান আছে কি ?? আমি যা বলতে পারি তার থেকে আমি sudo su ব্যবহার করার কোনও উপায় দেখি না ...

কোন সাহায্যের জন্য ধন্যবাদ!


কেন নিকট ভোট? এই প্রশ্নটি
বিষয়টিতে:

উত্তর:


5

আমার বর্তমান পরিবেশে আমি যেভাবে এটি অর্জন করব তা হ'ল -tপতাকাটি দিয়ে ssh চালানো যা tty বরাদ্দকে বাধ্য করে এবং এরপরে এর মধ্যে sudo -u মূল চালানো হবে:

ssh -t hostname << EOF
  command1
  sudo -u root command2
  sudo -u otheruser "command3 | command4"
  sudo -u root /bin/bash -c "command5; command6; command7"
  command8 && ( sudo -u otheruser /bin/bash -c "cmd1 ${1}; cmd2 {$2}" ) || echo cmd2 did not work

EOF

দূরবর্তী দিকের sudoers এ আমার অ্যাকাউন্ট রয়েছে যাতে কোনও পাসওয়ার্ডের প্রয়োজন হয় না।

এই উদাহরণটি আপনাকে একক ssh অধিবেশনে এটি করার বিভিন্ন উপায় দেখায়, بش সঙ্গে বাশেলের সাথে একাধিক কমান্ড চালানো বা সাব-শেলের মধ্যে। এও নোট করুন যে আপনি যদি উপরের কোডটি এক্সিকিউটেবল স্ক্রিপ্টে রাখেন তবে আপনি কমান্ড লাইন আর্গুমেন্টগুলি ($ 1 এবং $ 2) ssh এ পাস করতে পারেন এবং এগুলি প্রসারিত হবে এবং তারপরে দূরবর্তী দিকে রেফারেন্স করা হবে।


দুর্ভাগ্যক্রমে কারণ আমি রিমোট সার্ভারটি পরিচালনা করি না, আমি বিশ্বাস করি যে আমি এখানে sudo su ব্যবহার করে আটকে রয়েছি। এটি এখনও এই ফর্ম্যাটে কাজ করবে?
ম্যাট 124234

হ্যাঁ এটি কাজ করবে। অনুরোধ জানানো হলে আপনি পাসওয়ার্ডটি প্রবেশ করতে পারেন।
মাইকেল মার্টিনেজ

আমি চেষ্টা করেছি: ssh -t mrhyner@stg-app3.indeed.net << EOF sudo su - adcentrl egrep 'ERROR \ | WARN' / home / adcentrl / cronjobs / logs / * / * EOF তবে আমি পেয়েছি: "সিউডো -স্টার্মিনাল বরাদ্দ দেওয়া হবে না কারণ স্টিডিন টার্মিনাল নয়। "
ম্যাট 124234

পুরোপুরি ঠিক আছে। এই সতর্কতা উপেক্ষা করুন এবং এগিয়ে যান। আপনি যদি চান তবে আপনি রিমোট প্রান্তে / ইত্যাদি / সুডোরগুলিতে "রিকোয়ারটিটি" অক্ষম করতে পারেন
মাইকেল মার্টিনেজ

5

আপনি যদি পাসওয়ার্ড জিজ্ঞাসা করতে না চান বা sudo থামাতে না পারেন তবে একটি সহজ কৌশল হ'ল এটি স্থানীয়ভাবে পড়ুন এবং এটি স্থানীয় ভেরিয়েবলে সংরক্ষণ করুন:

read -p 'Password: ' -s password

ssh -t user@1.2.3.4 <<EOF
  echo "$password" | sudo -S whoami
EOF

1

যদি sudo পাসওয়ার্ডহীন কমান্ডগুলি মঞ্জুর করার জন্য কনফিগার করা থাকে তবে এটি আপনার যা করা উচিত তা করা উচিত:

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs'" > file.txt

অথবা

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs > file.txt'"

আপনি file.txtস্থানীয়ভাবে বা দূরবর্তীভাবে ফাইল তৈরি করতে চান তা নির্ভর করে ।

অন্যথায়, এখানে দূরবর্তী ব্যবহারকারীর পাসওয়ার্ডটি পাস করার একটি উপায় sudo:

echo mrhyner_password | \
  ssh mrhyner@test-server.net \
  "sudo -S su - adcentrl -c 'egrep ERROR\|WARN /home/adcentrl/cronjobs/logs/*/*'"

খুব আকর্ষণীয়. তবে -t ছাড়া ssh ব্যবহার করে আমাকে "টিটিটি উপস্থিত নেই" বলে। ইন-টি যুক্ত করা এই ত্রুটিটি সরিয়ে দেয় তবে এটি 'পাসো সু' সম্মানের বলে মনে হচ্ছে না কারণ এটি আমাকে পাসওয়ার্ডের জন্য অনুরোধ করে। এখানে আমি বিশেষভাবে যা করছি তা এখানে: ssh -t mrhyner@test-server.net "sudo su - adcentrl -c egrep" ERROR \ | WARN "/ home / adcentrl / cronjobs / logs / * / *" এটি আমাকে দেয়: বাশ : সতর্কতা: কমান্ডটি মিহিনারের জন্য [sudo] পাসওয়ার্ড খুঁজে পায়নি:
ম্যাট 124234

দুঃখিত, আমি আপাতদৃষ্টিতে এই জিনিসগুলিতে আমার মন্তব্যগুলি ফর্ম্যাট করতে জানি না
Matt124234

আমি ধরে নিছিলাম যে সুডো আপনার দূরবর্তী অ্যাকাউন্টের জন্য পাসওয়ার্ডহীন হওয়ার জন্য কনফিগার করা হয়েছে।
jlliagre

এবং আপনি অতিরিক্ত একক উদ্ধৃতি অনুপস্থিত।
jlliagre

এটি হ'ল এটি আমাকে কারণ হিসাবে ডেকেছিল যে কোনও কারণে বাশ ssh কমান্ডকে সম্মান করছে না। এটি
এমনভাবে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.