bash - tutorial - shell script شرح




كيفية الحصول على كلمة مرور من البرنامج النصي shell بدون echoing (6)

لدي برنامج نصي يقوم بأتمتة عملية تحتاج إلى الوصول إلى نظام محمي بكلمة مرور. يتم الوصول إلى النظام عبر برنامج سطر أوامر يقبل كلمة مرور المستخدم كوسيطة.

أرغب في مطالبة المستخدم بكتابة كلمة المرور الخاصة به ، وتعيينه لمتغير shell ، ثم استخدام هذا المتغير لإنشاء سطر الأوامر الخاص ببرنامج الوصول (الذي سيؤدي بالطبع إلى إخراج دفق سوف أقوم بمعالجته).

أنا مبرمج ذو كفاءة عالية في بورن / باش ، لكنني لا أعرف كيف أقبل إدخال المستخدم دون أن يكون له صدى إلى المحطة (أو ربما يردد صدى باستخدام أحرف "*").

يمكن لأي شخص أن تساعد في ذلك؟


إليك طريقة أخرى للقيام بذلك:

#!/bin/bash
# Read Password
echo -n Password: 
read -s password
echo
# Run Command
echo $password

سوف يوقف read -s صدى بالنسبة لك. فقط echo في السطر الأخير بالأمر الذي تريد تشغيله.


بادئ ذي بدء ، إذا كان أي شخص سيقوم بتخزين أي كلمة مرور في ملف. أود أن أتأكد من أنها مجزأة. إنه ليس أفضل أمان ولكن على الأقل لن يكون في نص عادي.

  1. أولاً ، أنشئ كلمة المرور والعلامة:

    صدى "password123" | md5sum | cut -d '-' -f 1> / tmp / secret

  2. الآن إنشاء البرنامج الخاص بك لاستخدام التجزئة ، في هذه الحالة يتلقى هذا البرنامج القليل إدخال المستخدم لكلمة مرور دون صدى ومن ثم تحويله إلى تجزئة للمقارنة مع التجزئة المخزنة. إذا كان يتطابق مع التجزئة المخزنة ، يتم منح الوصول:

    #! / بن / سحق

    PASSWORD_FILE="/tmp/secret"
    MD5_HASH=$(cat /tmp/secret)
    PASSWORD_WRONG=1
    
    
    while [ $PASSWORD_WRONG -eq 1 ]
     do
        echo "Enter your password:"
        read -s ENTERED_PASSWORD
        if [ "$MD5_HASH" != "$(echo $ENTERED_PASSWORD | md5sum | cut -d '-' -f 1)" ]; then
            echo "Access Deniend: Incorrenct password!. Try again"
        else
            echo "Access Granted"
            PASSWORD_WRONG=0
        fi
    done
    

بطانة واحدة:

read -s -p "Password: " password

تحت لينكس (و cygwin) يعمل هذا النموذج في bash و sh. قد لا يكون معيار Unix sh ، مع ذلك.

لمزيد من المعلومات والخيارات ، في bash ، اكتب "help read".

$ help read
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
Read a line from the standard input and split it into fields.
  ...
  -p prompt output the string PROMPT without a trailing newline before
            attempting to read
  ...
  -s                do not echo input coming from a terminal

لقد وجدت أن الأمر askpass مفيد

password=$(/lib/cryptsetup/askpass "Give a password")

يتم استبدال كل حرف إدخال بـ *. انظر: إعطاء كلمة المرور ****


#!/bin/bash
echo "please input password"
read -s pass 
clear
echo "password is: $pass"

#!/bin/bash
stty -echo
printf "Password: "
read PASSWORD
stty echo
printf "\n"




sh