it-swarm.asia

سودو مع كلمة المرور في سطر الأوامر واحد؟

في الأيام المزدحمة ، أود أن أجري

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

في الليل وانتقل إلى السرير ، على أمل أن يتم تثبيت التطبيق تلقائيًا. لكن ما أراه في اليوم التالي هو الشاشة حيث يسألني سودو عن كلمة المرور. فكيف يمكنني تشغيل سودو بكلمة مرور في سطر أوامر واحد ، أو هل هناك أي طريقة أخرى للقيام بذلك؟

103
Jichao

نعم ، استخدم رمز التبديل -S الذي يقرأ كلمة المرور من STDIN:

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

لذلك بالنسبة لقضيتك ، ستبدو كما يلي:

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

بالطبع ، استبدل <password> بكلمة مرورك.

152
John T

يمكنك استبدال سطر الأوامر الخاص بك بهذا:

$Sudo su

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

ستتم مطالبتك بكلمة المرور الخاصة بك على الفور ، ثم سيتم تشغيل بقية الأوامر كمستخدم خارق.

10
CarlF

العديد من الحلول الأخرى لها عيب أنها تعمل بشكل غير ضروري ./configure و make كجذر.

هذا ملفوف قليلاً ، لكن يجب أن يعمل:

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

لاحظ استخدام علامات الاقتباس المزدوجة للسماح بـ $USER للتوسيع بواسطة Shell (غير الجذر).

يمكنني أيضًا إضافة رمز sleep 60 قبل الأمر halt. لقد قمت أحيانًا بأشياء مثل هذا ، أتوقع أن يعمل الأمر لفترة طويلة ، لكن هناك خطأ ما وينتهي على الفور ؛ sleep يتيح لي قتل الأمر قبل إيقاف النظام. أو يمكنك استخدام shutdown مع وسيطة زمنية.

10
Keith Thompson

يمكنك أيضًا تكوين Sudo باستخدام visudo للسماح للمستخدم باستخدام make as Sudo دون كلمة مرور.

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

تعيين HISTIGNORE إلى " Sudo -S "

$ export HISTIGNORE='*Sudo -S*'

ثم قم بتمرير كلمة المرور الخاصة بك بأمان إلى Sudo:

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

"التاريخ" يعني عدم حفظ هذا الأمر في السجل. هذا هو التاريخ في الذاكرة أو ملف "~/.bash_history".

على سبيل المثال ، سيقوم ما يلي بإدخال كلمة المرور بأمان إلى أمر Sudo ، دون الاحتفاظ بمحفوظات كلمة المرور الخاصة بك.

"-S" ، يعني استخدام stdin لكلمة المرور ،

يعني "-k" تجاهل بيانات الاعتماد المخزنة مؤقتًا لإجبار Sudo على السؤال دائمًا. هذا هو لسلوك ثابت.

$ 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 دقائق. نعم ، لا يجب أن يستغرق whoami 5 دقائق ، لكنني أعتقد أنه ربما يكون قد تم تشغيله قبل كل أمر للتناسق. يمكنك أيضًا وضع "export HISTIGNORE = ' Sudo -S '" في ملف ~/.bashrc الخاص بك ، ثم تحميله بـ ". ~/.bashrc" أو تسجيل الخروج ثم تسجيل الدخول. ومع ذلك ، أفكر في استخدام هذا لأغراض البرمجة النصية ، لذلك سأبقيها في الجزء العلوي من جميع البرامج النصية الخاصة بي لأفضل ممارسات الأمان. قد يكون تعيين "صدى" "| Sudo -S -v" على متغير بدلاً من ذلك فكرة جيدة ، ثم قم بتشغيل المتغير قبل كل أمر يحتاج إلى امتيازات الجذر ، راجع تعليق Janar. يجب أن يتضمن تعليق "John T" أيضًا المعلمة "-k" ، كما لو كنت تقوم بتشغيل "Sudo -S" بدون "-k" وأن ذاكرة التخزين المؤقت لمصادقة Sudo لديها بالفعل بيانات اعتمادك (وما زالت صالحة ، ذاكرة التخزين المؤقت لمصادقة Sudo الافتراضية هي 5 دقائق) ثم bash سيتم تشغيل كلمة المرور الخاصة بك كأمر بدلاً من ذلك ، وهو أمر سيء.

7
user393365

يمكنك أن تفعل ذلك أيضا:

Sudo -S <<< "password" command
2
Jahid

ملاحظة ، لقد وجدت أن هذه الطريقة لا تعمل على إصدار أقدم من Sudo ، وتحديداً "Sudo version 1.6.7p5":

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

حيث تعمل هذه الطريقة على الإصدارات القديمة والجديدة سودو:

$ echo "<your_password>" | Sudo -S -v
$ Sudo whoami
2
Darren DeHaven

إذا كنت ترغب في مزيد من الحذر ، فيمكنك عمل نص برمجي وتغيير أذونات الملف بحيث يمكن فقط للجذر قراءته وتحريره ثم تشغيله.

مثال:
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  

استمتع ؛-)

2
desgua

يعد إعداد Sudo كهذا أمرًا خطيرًا إذا حدث أن رأى شخص ما أن Sudo لا يتطلب كلمة مرور على حسابك. ما لم تعرف ما تفعله ، لا تفعل ذلك. لقد حدث ذلك في برنامج التدريب المحلي A + مع الكمبيوتر التجريبي الخاص بي عدة مرات ... -_-

يبدو أن ما قاله John T. يبدو جيدًا ، إلا أنه لا يزال هناك خطر العثور على كلمة المرور في سجل Shell. يبدو ما قاله CarlF أفضل ، ولكن إذا فشل أحد الأوامر ، فسيظل الكمبيوتر يعمل بامتيازات المستخدم الخارق.

1
TimE.

تم حل المشكلة. على سبيل المثال ، إلى جذر المستخدم:

echo -e 'password\npassword\n' | Sudo passwd root
0
Jerson Martínez

أنا شخصياً أقوم بنفس الشيء تمامًا كما أجاب John T في 9 نوفمبر 2009 في 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

بهذه الطريقة يمكنني بسهولة استخدام متغير الألغام بدلاً من Sudo ،

$AutoSuDo apt-get update;

هذا مفيد للغاية مع بعض النصوص الطويلة. أنا أساسا الاستفادة من هذه لأجهزة الكمبيوتر الشخصية للآخرين ، والتي لا بد لي من الحفاظ عليها.

أوصي أيضًا بالاهتمام على:

  • desgua الإجابة في 19 أبريل 11 في 23:56
  • user224306 تعليق في 14 مايو '13 في 17:38 لـ John T answer في 9 نوفمبر '09 في 2:47
0
Janar