एक कमांड लाइन में पासवर्ड के साथ sudo?


115

व्यस्त दिनों में, मैं दौड़ना चाहूंगा

$ ./configure && make && sudo make install && halt

रात को और बिस्तर पर जाएं, उम्मीद है कि एप्लिकेशन स्वचालित रूप से इंस्टॉल हो जाएगा। लेकिन मैं अगले दिन जो देख रहा हूं वह स्क्रीन है जहां सूडो मुझसे पासवर्ड मांगते हैं। तो मैं एक कमांड लाइन में पासवर्ड के साथ sudo कैसे चला सकता हूं, या ऐसा करने के लिए कोई अन्य तरीका है?


आपको haltरूट के रूप में चलाने की आवश्यकता है।
कीथ थॉम्पसन

1
नहीं है sudoएक 15 मिनट का समय समाप्त हो? क्या आप ऐसा नहीं कह सकते, कह सकते हैं, sudo lsया कुछ इसी तरह, अपना पासवर्ड दर्ज कर सकते हैं, और फिर उपरोक्त कमांड को चला सकते हैं, जिसमें sudoविशेषाधिकार अभी भी सक्रिय हैं? (मैं इस समय इसका परीक्षण नहीं कर सकता, अन्यथा मैं इसे एक उत्तर के रूप में पोस्ट करूंगा।)
मैट

1
टाइमआउट चालू sudoहै। सुरक्षा के प्रति सचेत लोग (उर्फ पागल, मेरे जैसे) इसे शून्य पर सेट करें ... :-)
dda

जवाबों:


173

हां, -SSTDIN से पासवर्ड पढ़ने वाले स्विच का उपयोग करें :

$echo <password> | sudo -S <command>

तो आपके मामले के लिए यह इस तरह दिखेगा:

$./configure && make && echo <password> | sudo -S make install && halt

बेशक, <password>अपने पासवर्ड के साथ बदलें ।


42
जाहिर है, कोई इसे चलाना नहीं चाहेगा, क्योंकि शेल हिस्ट्री में किसी और का कोई खतरा हो।
ब्रेट डैनियल

एक दूरस्थ होस्ट पर विशेषाधिकार प्राप्त कमांड को चलाने के त्वरित तरीकों की तलाश और यह धन्यवाद काम करता है।
नेलारो

13
यदि आपने cho इको <पासवर्ड> का उपयोग करने का निर्णय लिया है | कमांड इतिहास पर पासवर्ड को उजागर करने से बचने के लिए sudo -S 'विकल्प, SPACE वर्ण के साथ कमांड शुरू करें। बेशक, सबसे अच्छा विकल्प एक सुरक्षित फ़ाइल से पासवर्ड को पाइप करना है।
शैनन हॉवर्थ

आप इसका उपयोग करना चाहते हैं, यदि आपके पास $ VARIABLE में पासवर्ड है (उदाहरण के लिए आप
sops के

9 साल बाद और अभी भी एक आकर्षण की तरह काम करता है :)
WinEunuuchs2Unix

10

आप अपनी कमांड लाइन को इस से बदल सकते हैं:

$sudo su

$./configure && make && make install && halt

आपको तुरंत अपने पासवर्ड के लिए कहा जाएगा, फिर बाकी कमांड सुपरसुअर के रूप में चलेंगे।


8
इस का एक वैकल्पिक (और शायद पसंदीदा) संस्करण:sudo sh -c "./configure && make && make install && halt"
3

2
लेकिन तब सभी संकलित संकलित फाइलों में सुपरयूज़र की अनुमति नहीं होगी? यह आपको चलने से रोकता है ./configure && बाद में एक नियमित उपयोगकर्ता के रूप में बनाता है।
23:45 पर user45909

हां, user45909, आप काफी सही हैं। मेरे पास व्यक्तिगत रूप से कभी भी पुनर्मिलन नहीं हुआ है ।/configure && वैसे भी मुख्य पैकेज का अपडेट डाउनलोड करने के बाद बनाते हैं, लेकिन मैं संभावित रूप से विशिष्ट हूं।
कार्लएफ

10

अन्य समाधानों में से कई का नुकसान यह है कि वे अनावश्यक रूप से ./configureऔर makeजड़ के रूप में चलते हैं ।

यह थोड़ा जटिल है, लेकिन यह काम करना चाहिए:

sudo sh -c "su $USER -c ./configure && su $USER -c make && make install && halt"

$USER(गैर-रूट) शेल द्वारा विस्तारित करने की अनुमति देने के लिए दोहरे उद्धरणों के उपयोग पर ध्यान दें ।

मैं कमांड sleep 60से पहले भी जोड़ सकता हूं halt। मैंने कभी-कभी इस तरह की चीजें की हैं, कमांड को लंबे समय तक चलने की उम्मीद है, लेकिन कुछ गलत हो जाता है और यह तुरंत समाप्त हो जाता है; sleepइससे पहले कि प्रणाली बंद हो जाता है मुझे आदेश को मारने की सुविधा देता है। या आप shutdownसमय तर्क के साथ उपयोग कर सकते हैं ।


9

आप sudo को भी कॉन्फ़िगर कर सकते हैं visudoजिससे आप उपयोगकर्ता को पासवर्ड के बिना sudo के रूप में उपयोग कर सकते हैं।

User_Alias USERS = your_user
Cmnd_Alias CMDS = /usr/bin/make
USERS ALL = (ALL) NOPASSWD: CMDS

9

" Sudo -S " के लिए इतिहास सेट करें

$ export HISTIGNORE='*sudo -S*'

फिर अपना पासवर्ड सुरक्षित रूप से पास करने के लिए:

$ echo "your_password" | sudo -S -k <command>

"इतिहास" का अर्थ इतिहास में इस आदेश को नहीं सहेजना है। वह इतिहास है मेमोरी या "~ / .bash_history" फ़ाइल में।

उदाहरण के लिए, नीचे आपके पासवर्ड के इतिहास को बनाए रखने के बिना, आपके पासवर्ड को sudo कमांड पर सुरक्षित रूप से पाइप करेगा।

"-S", पासवर्ड के लिए स्टड का उपयोग करने का मतलब है,

"-क" का अर्थ है कि हमेशा से पूछने के लिए सूडो को मजबूर करने के लिए कैश्ड क्रेडेंशियल्स की अनदेखी करना। यह सुसंगत व्यवहार के लिए है।

$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh

उपरोक्त विधि के लिए नकारात्मक पक्ष यह है कि यदि आप इतिहास में आपके द्वारा चलाए गए आदेशों को बाद में देखना चाहते हैं तो वे वहां नहीं होंगे। सुडो प्रमाणीकरण क्रेडेंशियल कैश को अपडेट करने के लिए एक और तरीका है (डिफ़ॉल्ट 5 मिनट के समय के साथ सक्षम है), फिर अलग से सुडो को चलाएं। लेकिन इसका नकारात्मक पक्ष यह है कि आपको 5 मिनट कैश के बारे में पता होना चाहिए।

उदाहरण के लिए:

$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh

नोट: मैं यह सुनिश्चित करने के लिए प्रत्येक कमांड से पहले एक sudo चलाता हूं कि sudo कैश अपडेट है, क्योंकि डिफ़ॉल्ट 5 मिंट है। हाँ, जो कोमी को 5 मिनट का समय नहीं लेना चाहिए, लेकिन मुझे लगता है कि यह निरंतरता के लिए प्रत्येक कमांड से पहले चलाया जा सकता है। आप "एक्सपोर्ट HISTIGNORE = ' sudo -S भी लगा सकते हैं'"आपकी ~ / .bashrc फ़ाइल में, फिर इसे लोड करें"। ~ / .bashrc "या लॉगऑफ करें फिर लॉगिन करें। हालाँकि, मैं इसे स्क्रिप्टिंग उद्देश्यों के लिए उपयोग करने के बारे में सोच रहा हूं, इसलिए मैं इसे सर्वश्रेष्ठ सुरक्षा प्रथाओं के लिए अपनी सभी लिपियों में सबसे ऊपर रखूंगा।" इको "" सेट करना। sudo -S -v "के बजाय एक चर भी एक अच्छा विचार हो सकता है, तो बस प्रत्येक कमांड से पहले चर को चलाएं जो रूट विशेषाधिकारों की आवश्यकता है, जनेर की टिप्पणी देखें।" जॉन टी "की टिप्पणी में" -के "पैरामीटर भी शामिल होना चाहिए। , जैसे कि अगर आप "-k" के बिना "sudo -S" चलाते हैं और sudo प्रमाणीकरण कैश में पहले से ही आपकी साख है (और अभी भी वैध है, डिफ़ॉल्ट sudo प्रमाणीकरण कैश 5 मिनट है) तो bash आपके पासवर्ड को कमांड के बजाय चलाएगा, जो खराब।


1
जिस तरह से इतिहास में उपलब्ध चीजों को उपलब्ध नहीं कराने पर एक छोटे से नोट के रूप में, इसके सामने एक एकल स्थान के साथ अपनी कमांड चलाएं। किसी कारण से यह इतिहास की अनदेखी करता है।
मैट फ्लेचर

4

ध्यान दें, मैंने पाया है कि विधि sudo के पुराने संस्करण पर काम नहीं करती है, विशेष रूप से "Sudo संस्करण 1.6.7p5":

$ echo "<your_password>" | sudo -S -k whoami

जहां यह विधि पुराने और नए संस्करणों पर काम करती है:

$ echo "<your_password>" | sudo -S -v
$ sudo whoami

यह मूल प्रश्न का उत्तर नहीं है । किसी लेखक से स्पष्टीकरण मांगने या उसका स्पष्टीकरण देने के लिए, उनकी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपने स्वयं के पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी कर पाएंगे ।
DavidPostill

@ डेरेन डेवेन: क्या आप बता सकते हैं कि यह यहाँ पूछे गए प्रश्न का उत्तर कैसे बन सकता है?
रेनू चंद्रन चिंगथ


2

यदि आप अधिक देखभाल करना चाहते हैं, तो आप एक स्क्रिप्ट बना सकते हैं, फ़ाइल की अनुमतियों को बदल सकते हैं, इसलिए केवल रूट पढ़ और संपादित कर सकते हैं और फिर इसे चला सकते हैं।

उदाहरण:
1) एक फ़ाइल बनाएँ:

gedit ~/.easy.install  

2) इसे पेस्ट करें और सहेजें:

./configure && make && echo <password> | sudo -S make install && halt  

3) इसे निष्पादन योग्य बनाएं:

sudo chmod +x ~/.easy.install  

4) फ़ाइल की अनुमतियों को बदलें ताकि केवल रूट इसे पढ़ और संपादित कर सके:

sudo chmod 700 ~/.easy.install  

5) भागो:

~/.easy.install  

का आनंद लें ;-)


इको <पासवर्ड> अभी भी प्रक्रिया सूची में दिखाई देगा और यदि कोई व्यक्ति सही समय पर ps aux के साथ भाग्यशाली हो जाता है, तो वे पासवर्ड को स्पष्ट पाठ में देख सकते हैं। पासवर्ड को फ़ाइल में सहेजने के लिए बेहतर है और <फ़ाइल में sudo में रीडायरेक्ट करने के लिए <का उपयोग करें।
बोबापुल

1

सुडो को इस तरह सेट करना खतरनाक है अगर किसी को इस तथ्य को देखने के लिए हुआ कि सूडो को आपके खाते पर पासवर्ड की आवश्यकता नहीं है। जब तक आप नहीं जानते कि आप क्या कर रहे हैं, ऐसा मत करो। मैंने अपने प्रायोगिक कंप्यूटर के साथ अपने स्थानीय A + प्रशिक्षण कार्यक्रम में ऐसा कई बार किया है ... -_-

जॉन टी ने कहा कि हालांकि अच्छा लगता है, सिवाय इसके कि अभी भी शेल इतिहास में पासवर्ड खोजने का जोखिम है। कार्लएफ ने कहा कि बेहतर लगता है, लेकिन अगर एक कमांड विफल हो जाती है, तो कंप्यूटर अभी भी सुपरसुसर विशेषाधिकारों के साथ चल रहा है।


0

व्यक्तिगत रूप से मैं काफी कुछ वैसा ही करता हूं जैसा कि जॉन टी ने 9 नवंबर को दोपहर 2:47 पर जवाब दिया था, मैंने उनके जवाब के मार्गदर्शन के अनुसार मेरा भी सुधार किया है, धन्यवाद।

अंतर यह है कि मैं चर का उपयोग करता हूं, जैसे कुछ:

AutoSuDo=$" $echo pass | sudo -S";
# Change AutoSuDo to something else.
# Note that string starts with space,
# useful only if used as first command in line

इस तरह मैं आसानी से सूडो के बजाय मेरा चर का उपयोग कर सकता हूं,

$AutoSuDo apt-get update;

यह कुछ लंबी स्क्रिप्ट्स के साथ काफी काम आता है। मैं मुख्य रूप से दूसरों के निजी कंप्यूटर के लिए इनका उपयोग करता हूं, जिसे मुझे बनाए रखना है।

मैं इस पर भी ध्यान देने की सलाह देता हूं:

  • desgua उत्तर 19 अप्रैल 11 को 23:56 पर
  • user224306 टिप्पणी 14 मई 13 को 17:38 पर जॉन टी जवाब के लिए 9 नवंबर को 2:47 बजे

0

समस्या हल हो गई है। उदाहरण के लिए, उपयोगकर्ता रूट के लिए:

echo -e 'password\npassword\n' | sudo passwd root

क्या करता है-झंडा, @jerson मार्टिनेज?
user674669

1
गूंज के लिए -e ध्वज यह विशेष अर्थ के रूप में कुछ दृश्यों की व्याख्या करने की अनुमति देता है।
जेरसन मार्टिनेज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.