এসএসএইচ: সুডো কমান্ড কার্যকর করুন


44

আমার একটি ইন্টারেক্টিভ শেল স্ক্রিপ্ট রয়েছে, যে এক জায়গায় অন্য মেশিনে ছুটে যাওয়ার দরকার (উবুন্টু ভিত্তিক) এবং রুট হিসাবে কিছু চালানো উচিত (ব্যবহারকারীর তার পাসওয়ার্ড প্রবেশ করা উচিত, তবে রিমোট কমান্ডটি স্ক্রিপ্টে উল্লিখিত মত চলতে হবে):

# ...
ssh remote-machine 'sudo ls'
# ...

তবে, আমি সবসময় এই ত্রুটি বার্তাটি ফিরে পাই:

sudo: no tty present and no askpass program specified

ঠিক আছে, এটা বেশ পরিষ্কার। তবে আমি কীভাবে এটিকে পরিগ্রহ করতে পারি? এরকম কিছু হওয়া উচিত:

$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:

/bin
/etc
/var

উত্তর:


52

আশ্চর্যজনক sshসমস্ত কিছুর একটি নিরাময় আছে। বিন্দুটি হল -tসিডো-টাইটি বরাদ্দের জন্য ssh কে জোর করে পতাকা যুক্ত করা:

ssh -t remote-server 'sudo ls'

1
পিটিওয়াইগুলি তবে স্ক্রিপ্টগুলির সাথে জিনিসগুলিকে জগাখিচু করতে পারে। lsআউটপুট উদাহরণস্বরূপ \ r \ n টি অন্তর্ভুক্ত থাকবে।
টুবু

1
এর চারপাশের সহজ উপায় হ'ল এলএসকে নন-টার্মিনাল মোডে বাধ্য করা। ls | catকরবে - এটি দেখতে পাবে যে স্টডআউটটি একটি পাইপ। এই নির্দিষ্ট প্রশ্নে, এটি প্রাসঙ্গিক নয়, কারণ এটি স্পষ্টতই একটি টার্মিনাল থেকে ইন্টারেক্টিভভাবে চালানোর উদ্দেশ্যে করা হয়েছিল - যাতে আপনি সম্ভবত কলাম এবং রং এবং কী চান না not
গাবে

0

এই পদ্ধতিটি ssh এর পরে sudo ব্যবহার করে একটি একক স্ক্রিপ্ট চালাবে:

ধরে নেওয়া যাক আমাদের কাছে সুডো ক্ষমতা সম্পন্ন "রিমোট" ব্যবহারকারী রয়েছে এবং আমাদের কাছে এটির মূল হিসাবে চালিত করতে একটি স্ক্রিপ্ট রয়েছে।

1) লগইনে ব্যবহারের জন্য / ইত্যাদি / পাসডাব্লুডিতে একটি স্ক্রিপ্ট সেট করুন:

remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh

2) "login.sh" এর ভিতরে আমরা স্ক্রিপ্টটি "sudo" হিসাবে চালাতে চাই:

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
    #Not running as root, so we execute "sudo"
    sudo /usr/local/bin/script.sh
else
    #We are already rooted, so "sudo" is not required.
    /usr/local/bin/script.sh
fi
exit;

সাধারণত এটি পাসওয়ার্ডটি দু'বার জিজ্ঞাসা করবে: ssh login + sudo। আপনি যদি কেবল একবার এটি ইনপুট করতে চান তবে পাসওয়ার্ড ছাড়াই sudo চেষ্টা করুন (প্রস্তাবিত নয়)। <- দয়া করে বোল্ডউইন মন্তব্য পড়ুন।

প্রধান সুবিধাটি হ'ল "ssh" এর জন্য অন্য কোনও প্যারামিটারের প্রয়োজন নেই (যেমন-টি), এবং সার্ডো সাইডে সুডো বাধ্য করা হয়। এছাড়াও, একবার স্ক্রিপ্টটি প্রস্থান করার পরে, ব্যবহারকারীটি পাশাপাশি লগ আউট হয়।

এটি যে মার্জিত নাও হতে পারে, তবে এটি সহজ এবং কাজ করে।


আহ ওহ. আপনার রিমোট ব্যবহারকারীকে sudoersএই জাতীয় একটি সার্ভারে ফাইলে রাখা হ'ল একটি বিপর্যয় waiting যদি কেউ আপনার ব্যবহারকারীর হিসাবে অ্যাক্সেস অর্জন করে (যেমন ওয়েব সার্ভারের মাধ্যমে), তবে তিনি তত্ক্ষণাত রুটে পরিণত হতে পারেন । আপনাকে ধন্যবাদ, তবে আমি সমাধানগুলির সন্ধান করছিলাম, যা আমার সার্ভারের কনফিগারেশনকে বৈষম্য হিসাবে স্থাপন করবে না। যদি আপনার কোনও সমাধান হয়ে থাকে, যে কোনওভাবে যাদুকরভাবে sudoকমান্ডটির জন্য এসএসএইচ থেকে প্রমাণীকরণটি পুনরায় ব্যবহার করে , আমি আরও আগ্রহী (এবং সম্ভবত এসএসএইচের প্রতিস্থাপনগুলি অনুসন্ধান করা শুরু করব ...)।
বোল্ডউইন

@ বোল্ডউইন: হ্যাঁ, "পাসওয়ার্ড ছাড়াই সুডো" সেট করার যে সুরক্ষা ঝুঁকি রয়েছে ... এটি একটি alচ্ছিক পদক্ষেপ। আমি আপনার সাথে একমত, যদি এসএসএইচ প্রমাণীকরণটি পুনরায় ব্যবহার করতে পারে তবে এই ধরণের "সমাধান" দরকার হবে না। আপনার মন্তব্যের জন্য ধন্যবাদ.
7:58

-1

ইন্টারেক্টিভিটি ছাড়াই রুট অ্যাক্সেস পেতে নিম্নলিখিত কমান্ডটি চালাতে পারেন:

ssh server " sudo command" < sudopassword.txt

1
এটি কাজ করবে না কারণ স্টিডিন কোনও টার্মিনাল ডিভাইস হবে না (এটি নির্দিষ্ট ফাইল থেকে পড়া হবে)।
অ্যান্টনি জি - মনিকার পক্ষে ন্যায়বিচার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.