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


في أيام مزدحمة ، أرغب في الجري

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

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


90
2017-11-09 02:37


الأصل


انت تحتاج halt لتشغيل كجذر. - Keith Thompson
لا sudo لديك مهلة 15 دقيقة؟ لا تستطيع الجري ، قل ، sudo ls أو ما شابه ذلك ، أدخل كلمة المرور الخاصة بك ، ثم قم بتشغيل الأمر أعلاه ، بعد sudo الامتيازات لا تزال نشطة؟ (لا أستطيع اختبار ذلك في الوقت الحالي ، وإلا سأقوم بنشره كإجابة). - Matt
المهلة على sudo هو شكلي. ضبط الناس الوعي الأمني ​​(المعروف أيضا باسم بجنون العظمة ، مثلي) إلى الصفر ... :-) - dda
انظر أيضا مطالبة كلمة المرور sudo وبرمجيا رفع امتياز في البرنامج النصي باش؟، كيفية إدخال كلمة المرور مرة واحدة فقط في برنامج نصي bash التي تحتاج إلى sudo، طلب امتياز الجذر من داخل البرنامج النصي، إنشاء مستخدم sudo في البرنامج النصي بدون مطالبة بكلمة المرور ...، كيفية مطالبة المستخدم لكلمة sudo؟، وما إلى ذلك - jww


الأجوبة:


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

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

لذا بالنسبة لحالتك ، سيبدو الأمر كالتالي:

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

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


130
2017-11-09 02:47



من الواضح أن المرء لن يرغب في ذلك إذا كان هناك أي خطر من رؤية شخص آخر لكلمة المرور في تاريخ القوقعة. - Brett Daniel
تبحث عن طرق سريعة لتشغيل الأوامر المتميزة على مضيف بعيد وهذا يعمل شكرا. - nelaaro
إذا قررت استخدام "echo <password> | الخيار sudo -S '، لتجنب تعريض كلمة المرور في محفوظات الأمر ، ابدأ الأمر بحرف SPACE. بطبيعة الحال ، فإن أفضل خيار هو توجيه كلمة المرور من ملف آمن. - user224306
قد ترغب في استخدام ذلك إذا كان لديك كلمة المرور في VARIABLE $ (يمكن أن يكون لديك توفير مع sops على سبيل المثال) - Natim
بعد 9 سنوات وما زالت تعمل مثل سحر :) - WinEunuuchs2Unix


يمكنك أيضا تكوين sudo مع visudo للسماح لك باستخدام المستخدم جعل مثل سودو دون كلمة مرور.

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

9
2017-11-09 03:03





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

هذا معقد بعض الشيء ، ولكن يجب أن يعمل:

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

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

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


9
2017-08-08 06:52





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

$sudo su

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

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


8
2017-11-09 03:14



نسخة بديلة (وربما المفضلة) من هذا: sudo sh -c "./configure && make && make install && halt" - quack quixote
ولكن بعد ذلك ، لن تحتوي جميع ملفات الترجمة التي تم إنشاؤها على أذونات المستخدم المتميز؟ سيمنعك هذا من تشغيل ./configure & & make كمستخدم منتظم في وقت لاحق. - user45909
نعم ، user45909 ، أنت على حق تماما. أنا شخصيا أبدا أعيد تشغيل ./configure & & إلا بعد تحميل تحديث الحزمة الرئيسية على أي حال ، ولكن أنا لا يمكن أن تكون نموذجية. - CarlF


تعيين HISTIGNORE على "sudo -S"

$ export HISTIGNORE='*sudo -S*'

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

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

"HISTIGNORE" تعني عدم حفظ هذا الأمر في السجل. هذا هو التاريخ في الذاكرة أو ملف "~ / .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

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


5
2017-11-25 19:43



فقط كملاحظة صغيرة على جعل الأشياء غير متوفرة في التاريخ ، قم بتشغيل الأمر الخاص بك مع مساحة واحدة في الجزء الأمامي منه. لسبب ما هذا يسبب التاريخ لتجاهله. - Matt Fletcher


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

مثال:
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
2018-04-19 23:56



صدى <password> سيظل يظهر في قائمة العمليات ، وإذا كان شخص ما محظوظًا مع ps aux في اللحظة المناسبة تمامًا ، فيمكنه رؤية كلمة المرور بنص واضح. من الأفضل حفظ كلمة المرور إلى ملف واستخدام <لإعادة توجيه من الملف إلى sudo. - bobpaul


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

sudo -S <<< "password" command

2
2018-06-09 14:15





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

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


1
2017-11-10 03:37





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

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

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

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

1
2017-12-08 15:18



هذا هو ليس إجابة على السؤال الأصلي. لنقد أو طلب توضيح من مؤلف ، اترك تعليقًا أسفل مشاركته - يمكنك دائمًا التعليق على مشاركاتك الخاصة ، وبمجرد حصولك على سمعة ستكون قادرا على التعليق على أي وظيفة. - DavidPostill♦
Darren DeHaven: هل يمكنك أن تشرح كيف يصبح هذا الجواب عن السؤال المطروح هنا؟ - Renju Chandran chingath


أنا شخصياً أفعل نفس الشيء تماماً كما أجاب جون تي في 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 answer on Apr 19 '11 at 23:56
  • تعليق user224306 يوم 14 مايو 13:38 في 17:38 لجون تي الجواب على 9 نوفمبر 2009 في 2:47

0
2018-06-29 20:57