এখানে উইলি হুইলারের উত্তরের একটি পরিবর্তিত সংস্করণ যা ফাইলের মাধ্যমে টর মাধ্যমে স্থানান্তরিত করে কিন্তু দূরবর্তী হোস্টে sudo পাসওয়ার্ডটি সমর্থন করে।
(stty -echo; read passwd; stty echo; echo $passwd; tar -cz foo.*) \
| ssh remote_host "sudo -S bash -c \"tar -C /var/www/ -xz; echo\""
এখানে অতিরিক্ত ম্যাজিকের সামান্য বিটটি হ'ল সুডোর -S বিকল্প। সুডো ম্যান পৃষ্ঠা থেকে:
-S, --stdin স্ট্যান্ডার্ড ত্রুটিতে প্রম্পট লিখুন এবং টার্মিনাল ডিভাইসটি ব্যবহার না করে স্ট্যান্ডার্ড ইনপুট থেকে পাসওয়ার্ডটি পড়ুন। পাসওয়ার্ডটি অবশ্যই একটি নতুন লাইন অক্ষর দ্বারা অনুসরণ করা উচিত।
এখন আমরা আসলে টারের আউটপুটটি ssh- এ পাইপ করতে চাইছি এবং এটি ইন্টারেক্টিভ টার্মিনাল থেকে পাসওয়ার্ডকে sudo-তে পাস করার যে কোনও উপায় সরিয়ে, ssh এর স্টিডিনকে টার স্টাডআউটে পুনর্নির্দেশ করে। (আমরা রিমোট প্রান্তে সুডোর এএসপিএএসএস বৈশিষ্ট্যটি ব্যবহার করতে পারি তবে এটি অন্য গল্প)) পাসওয়ার্ডটি আগে থেকে ক্যাপচার করে এবং ট্যারে আউটপুটে এটি প্রেরণ করে সাবস্কেলের মাধ্যমে এবং আউটপুটটি পাইপ করে আমরা sudo তে পেতে পারি We এসএসএসে সাবশেল। আমাদের ইন্টারেক্টিভ শেলটিতে আমাদের পাসওয়ার্ড ঝুঁকিতে থাকা পরিবেশের ভেরিয়েবলটি না রাখারও এর অতিরিক্ত সুবিধা রয়েছে।
আপনি লক্ষ্য করবেন আমি প্রম্পট মুদ্রণের জন্য -p বিকল্পটি দিয়ে 'পঠন' সম্পাদন করিনি। এটি কারণ sudo থেকে পাসওয়ার্ড প্রম্পটটি সহজেই আমাদের ইন্টারেক্টিভ শেলের স্ট্যাডারে SSH এর মাধ্যমে ফিরিয়ে দেওয়া হয়েছে। আপনি ভাবতে পারেন "সুডো কীভাবে নির্বাহ করা হচ্ছে তা দেওয়া হচ্ছে এটি আমাদের পাইপের ডানদিকে এসএসএসের ভিতরে চলছে?" যখন আমরা একাধিক কমান্ড প্রয়োগ করি এবং একে অপরের আউটপুট পাইপ করি তখন প্যারেন্ট শেল (এই ক্ষেত্রে ইন্টারেক্টিভ শেল) প্রতিটি কমান্ড পূর্ববর্তী সম্পাদন করার সাথে সাথে ক্রম অনুসারে চালিত করে। যেহেতু পাইপের পিছনে প্রতিটি কমান্ড চালিত হয় প্যারেন্ট শেল সংযুক্তি (পুনঃনির্দেশ) ডান হাতের স্ট্যান্ডিনের বাম-হাতের স্টাডাউটকে। প্রক্রিয়াগুলির মধ্য দিয়ে যাওয়ার পরে আউটপুট ইনপুট হয়ে যায়।
$ (stty -echo; read passwd; stty echo; echo $passwd; tar -cz foo.*) | ssh
remote_host "sudo -S bash -c \"tar -C /var/www/ -xz; echo\""
[sudo] password for bruce:
[1]+ Stopped ( stty -echo; read passwd; stty echo; echo
$passwd; tar -cz foo.* ) | ssh remote_host "sudo -S bash -c \"tar -C
/var/www/ -xz; echo\""
$ pstree -lap $$
bash,7168
├─bash,7969
├─pstree,7972 -lap 7168
└─ssh,7970 remote_host sudo -S bash -c "tar -C /var/www/ -xz; echo"`
আমাদের ইন্টারেক্টিভ শেলটি পিআইডি 68১6868, আমাদের সাবশেল পিআইডি 69৯69৯ এবং আমাদের এসএসএস প্রক্রিয়াটি পিআইডি 70৯70০।
একমাত্র ত্রুটিটি হ'ল সুডোর প্রম্পটটি ফেরত দেওয়ার সময় দেওয়ার আগে পঠন ইনপুট গ্রহণ করবে। একটি দ্রুত সংযোগ এবং দ্রুত দূরবর্তী হোস্টে আপনি এটি লক্ষ্য করবেন না তবে আপনি যদি হয় ধীর হয় তবে। কোনও বিলম্ব প্রম্পটে প্রবেশের ক্ষমতাকে প্রভাবিত করবে না; আপনি টাইপ করা শুরু করার পরে এটি প্রদর্শিত হতে পারে।
দ্রষ্টব্য আমি ডেমোর জন্য আমার লোকাল মেশিনে কেবল "রিমোট_হস্ট" এর জন্য একটি হোস্ট ফাইল এন্ট্রি যুক্ত করেছি।