sudo
बस उपयोग के लिए एक लॉगिन शेल आह्वान करने के लिए -i
। जब कमांड निर्दिष्ट नहीं किया जाता है, तो आपको लॉगिन शेल प्रॉम्प्ट मिलेगा, अन्यथा आपको अपने कमांड का आउटपुट मिलेगा।
उदाहरण (लॉगिन शेल):
sudo -i
उदाहरण (एक निर्दिष्ट उपयोगकर्ता के साथ):
sudo -i -u user
उदाहरण (एक आदेश के साथ):
sudo -i -u user whoami
उदाहरण (उपयोगकर्ता प्रिंट करें $HOME
):
sudo -i -u user echo \$HOME
नोट: बैकस्लैश चरित्र यह सुनिश्चित करता है कि डॉलर का चिन्ह लक्ष्य उपयोगकर्ता के शेल तक पहुंच जाए और कॉलिंग उपयोगकर्ता के शेल में व्याख्या न की जाए।
मैंने स्ट्रेस के साथ अंतिम उदाहरण की जाँच की है जो आपको बताता है कि वास्तव में क्या हो रहा है। आउटपुट बोले से पता चलता है कि शेल को --login
निर्दिष्ट कमांड के साथ और उसके साथ बुलाया जा रहा है , जैसे कि आपके स्पष्ट कॉल को कोसने के लिए, लेकिन इसके अलावा sudo अपना काम भी कर सकता है जैसे सेटिंग करना $HOME
।
# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...
मैंने देखा कि आप उपयोग कर रहे हैं -S
और मुझे नहीं लगता कि यह आमतौर पर एक अच्छी तकनीक है। यदि आप कीबोर्ड से प्रमाणीकरण किए बिना एक अलग उपयोगकर्ता के रूप में कमांड चलाना चाहते हैं, तो आप इसके बजाय SSH का उपयोग करना चाह सकते हैं। यह localhost
अन्य मेजबानों के लिए भी काम करता है और सार्वजनिक कुंजी प्रमाणीकरण प्रदान करता है जो बिना किसी इंटरेक्टिव इनपुट के काम करता है।
ssh user@localhost echo \$HOME
नोट: आपको SSH के साथ किसी विशेष विकल्प की आवश्यकता नहीं है क्योंकि SSH सर्वर हमेशा SSH क्लाइंट द्वारा एक्सेस किए जाने के लिए एक लॉगिन शेल बनाता है।