एक पासवर्ड पास करने में एसएसएच से अधिक, कोई आवश्यक नहीं है:
बिना किसी संवादात्मक पासवर्ड की आवश्यकता नहीं है और केवल स्टड ऑफ पासवर्ड को हड़पने के लिए आप सूदो-ट्टी (ssh "-t" स्विच के उपयोग के बिना) के लिए ssh को बिना ssh पर उपयोग कर सकते हैं। आप इसे sudo पर "-S" स्विच का उपयोग करके करते हैं। यह स्टड पर पासवर्ड के लिए सुडो को सुनता है, और जब यह एक नई लाइन देखता है तो सुनना बंद कर देता है।
उदाहरण 1 - सरल रिमोट कमांड
इस उदाहरण में, हम एक साधारण whoami
आदेश भेजते हैं :
$ ssh user@server cat \| sudo --prompt="" -S -- whoami << EOF
> <remote_sudo_password>
root
हम sudo को प्रॉम्प्ट जारी नहीं करने और स्टड से इसका इनपुट लेने के लिए कह रहे हैं। यह sudo पासवर्ड को पूरी तरह से साइलेंट करता है इसलिए केवल जो प्रतिक्रिया आपको मिलती है वह आउटपुट से है whoami
।
इस तकनीक से आपको ssho ssh के माध्यम से प्रोग्राम चलाने की अनुमति देने का लाभ है कि खुद को स्टड इनपुट की आवश्यकता होती है। ऐसा इसलिए है क्योंकि स्टड की पहली पंक्ति पर sudo पासवर्ड का उपभोग कर रहा है, फिर जो भी प्रोग्राम चलता है वह स्टड को पकड़ना जारी रखता है।
उदाहरण 2 - रिमोट कमांड जिसके लिए अपने स्वयं के स्टड की आवश्यकता होती है
निम्नलिखित उदाहरण में, रिमोट कमांड "कैट" को सुडो के माध्यम से निष्पादित किया जाता है, और हम रिमोट कैट के लिए स्टड के माध्यम से कुछ अतिरिक्त लाइनें प्रदर्शित करने के लिए प्रदान कर रहे हैं।
$ ssh user@server cat \| sudo --prompt="" -S -- "cat" << EOF
> <remote_sudo_password>
> Extra line1
> Extra line2
> EOF
Extra line1
Extra line2
आउटपुट दर्शाता है कि <remote_sudo_password>
लाइन सूडो द्वारा खपत की जा रही है, और यह कि दूरस्थ रूप से निष्पादित बिल्ली फिर अतिरिक्त लाइनों को प्रदर्शित कर रही है।
यह कहाँ फायदेमंद होगा इसका एक उदाहरण है यदि आप कमांड लाइन का उपयोग किए बिना किसी विशेषाधिकार प्राप्त कमांड को पासवर्ड पास करने के लिए ssh का उपयोग करना चाहते हैं। कहो, यदि आप ssh पर एक दूरस्थ एन्क्रिप्टेड कंटेनर माउंट करना चाहते हैं।
उदाहरण 3 - एक रिमोट वेराक्रिप्ट कंटेनर को माउंट करना
इस उदाहरण की लिपि में, हम सुदूर के माध्यम से वेरा क्रिप्टक कंटेनर को बिना किसी अतिरिक्त संकेत के पाठ के साथ बढ़ते हुए देख रहे हैं:
#!/bin/sh
ssh user@server cat \| sudo --prompt="" -S -- "veracrypt --non-interactive --stdin --keyfiles=/path/to/test.key /path/to/test.img /mnt/mountpoint" << EOF
SudoPassword
VeraCryptContainerPassword
EOF
यह ध्यान दिया जाना चाहिए कि ऊपर दिए गए सभी कमांड-लाइन उदाहरणों में (स्क्रिप्ट को छोड़कर) << EOF
कमांड लाइन पर निर्माण, स्थानीय मशीन के .bash_history में दर्ज किए जाने वाले पासवर्ड सहित सब कुछ टाइप कर देगा। इसलिए यह अत्यधिक अनुशंसित है कि वास्तविक दुनिया के उपयोग के लिए आप या तो इसका उपयोग पूरी तरह से एक स्क्रिप्ट के माध्यम से करते हैं, जैसे कि ऊपर दिए गए veracrypt उदाहरण के लिए, या, यदि कमांड लाइन पर है तो पासवर्ड को एक फ़ाइल में डालें और उस फ़ाइल को ssh के माध्यम से रीडायरेक्ट करें।
उदाहरण 1 ए - उदाहरण 1 स्थानीय कमांड-लाइन पासवर्ड के बिना
इस तरह पहला उदाहरण बनेगा:
$ cat text_file_with_sudo_password | ssh user@server cat \| sudo --prompt="" -S -- whoami
root
उदाहरण 2a - उदाहरण 2 स्थानीय कमांड-लाइन पासवर्ड के बिना
और दूसरा उदाहरण बन जाएगा:
$ cat text_file_with_sudo_password - << EOF | ssh va1der.net cat \| sudo --prompt="" -S -- cat
> Extra line1
> Extra line2
> EOF
Extra line1
Extra line2
यदि आप अपने इतिहास में लिपियों की सामग्री समाप्त नहीं करते हैं, तो पासवर्ड को एक अलग फ़ाइल में डालना अनावश्यक है यदि आप एक स्क्रिप्ट में पूरी चीज़ डाल रहे हैं। यह अभी भी उपयोगी हो सकता है, हालांकि, यदि आप उन उपयोगकर्ताओं को अनुमति देना चाहते हैं जिन्हें स्क्रिप्ट को निष्पादित करने के लिए पासवर्ड नहीं देखना चाहिए।
ssh <user@server> sudo <script>
, जैसा कि मैंने त्रुटि हो रही थीsudo: no tty present and no askpass program specified