Wie kann ich hier weitere Benutzernamen und Passwörter hinzufügen?

Wie kann ich hier weitere Benutzernamen und Passwörter hinzufügen?

Der Inhalt der Bash-Datei wird verschleiert

echo "Enter The Login Name:"
read username
echo "Enter The Password:"
read password

if [[ $username == "user"  && $password == "password" ]]
then
  echo -e "You're Logged In\n"
elif [ $username != "user" ] 
then
  echo -e "Invalid User Name\n"
else
  echo -e "Invalid Password\n"
fi

Antwort1

Einer der Kommentare lautet:

Erstellen Sie eine Textdatei mit Benutzernamen und Passwörtern. Und überprüfen Sie diese über eine Schleife aus der Datei.

Das ist eine gute Idee. Der Code könnte so aussehen:

#!/bin/bash

function validate {
    local user pass
    while IFS=' ' read -r user pass; do
       [ "$1" = "$user" ] && [ "$2" = "$pass" ] && return 0
    done </the/file
    return 1
}

read -rp "Login: " u
read -rsp "Password: " p

echo
if validate "$u" "$p"; then
   echo "Access granted."
else
   echo "Access denied."
fi

Beispiel /the/file:

kamil foo
joe bar
anotherUser pa$$word
bill password that contains spaces

Alles nach dem ersten Leerzeichen in einer Zeile ist das Passwort.

Anmerkungen:

  • Dies könnte ohne eine Funktion erfolgen. Die Funktion ist hier recht nützlich, da sie in der Lage ist, return 0ohne zusätzliche Logik von der Mitte der Schleife aus (erfolgreich) zu starten.
  • Eine leere Zeile bedeutet einen leeren Login und ein leeres Passwort. Beachten Sie, dass in *nix jede Zeile in einer Textdatei mit einem Zeilenumbruchzeichen enden sollte, sodass ein Zeilenumbruchzeichen ganz am Ende der Datei nicht bedeutet, dass danach eine leere Zeile folgt. Es ist jedoch recht einfach, am Ende eine wirklich leere Zeile einzufügen, seien Sie also vorsichtig. Alternativ können Sie der Funktion eine Logik hinzufügen, sodass ein leerer Login niemals akzeptiert wird.
  • Um diesen Code ohne Fehler auszuführen, müssen Sie Lesezugriff auf haben /the/file. Wenn Sie dies jedoch haben, können Sie die Datei einfach lesen und alle Geheimnisse kennen. Ich werde das hier nicht beheben. Das sichere Speichern von Passwörtern geht über den Rahmen dieser Frage hinaus.
  • Wenn Sie Passwörter lieber in die Shell-Datei selbst einbetten möchten, verwenden Siehier Dokument. Anstatt wie done </the/filefolgt vorzugehen:

       done <<'EOF'
    kamil foo
    joe bar
    anotherUser pa$$word
    bill password that contains spaces
    EOF
    

    Beachten Sie, dass das Zitieren des ersten EOFwichtig ist. Ohne es $$würde es erweitert werden.

verwandte Informationen