So erstellen Sie ein zufälliges, komplexes Passwort in SuSe 12

So erstellen Sie ein zufälliges, komplexes Passwort in SuSe 12

Ich brauche eine Möglichkeit, ein zufälliges Passwort zu generieren, das diese Anforderungen erfüllt:

  • Passwort mindestens 9 Zeichen
  • mindestens 2 Großbuchstaben
  • mindestens 2 Kleinbuchstaben
  • mindestens 2 Ziffern
  • mindestens 2 Sonderzeichen
  • muss mit einem Buchstaben beginnen

dies ist der Befehl, den ich habe:

{ shuf -r -n4 -e {A..Z}; shuf -r -n4 -e {a..z}; shuf -r -n4 -e {0..9}; } | shuf | tr -d $'\n'

aber es fehlen die Sonderzeichen

Betriebssystem ist SuSE 12

Antwort1

Sie könnten die Sonderzeichen mit einem weiteren hinzufügen shuf, dürfen aber keine Klammererweiterungen und ähnliche Bereiche verwenden.

Sie können sie jedoch explizit einzeln auflisten und in Anführungszeichen setzen, um sie vor der Shell zu schützen:

shuf -r -n2 -e '!' '"' '#' '$' % '&' '(' ')' '*' + , - . / : ';' '<' = '>' '?' @ '[' '\' ']' '^' _ '{' '|' '}'

Oder schieben Sie sie in einen String und verwenden Sie die Worttrennung, um sie in mehrere Argumente zu bringen. set -fAllerdings müssen Sie das Globbing mit deaktivieren, da das Asterisk sonst Probleme verursacht:

set -f
shuf -r -n2 -e $(sed -e 's/./& /g' <<< '!"#$%&()*+,-./:;<=>?@[\]^_{|}' )

(oder machen Sie es wie alle und fügen Sie an das Ende eines ansonsten sinnvollen Passworts, das auch ohne sie lang genug ist, zwei feste Sonderzeichen an.)


Um sicherzustellen, dass das erste Zeichen ein Buchstabe ist, fügen Sie am einfachsten einen separat hinzu und mischen Sie nur die Zeichen des restlichen Passworts. So würde das Passwort beispielsweise aus zwei Teilen bestehen, wobei der erste ein einzelner Buchstabe (Groß- oder Kleinbuchstabe) ist und der zweite das, was Sie in den Kommentaren hatten:

#!/bin/bash

set -f
pw=$(shuf -r -n1 -e {A..Z} {a..z})
pw="$pw$( { shuf -r -n4 -e {A..Z}; shuf -r -n4 -e {a..z}; shuf -r -n4 -e {0..9}; shuf -r -n2 -e $(sed -e 's/./& /g' <<< '@%+\/!#$^?:.(){}[]-_.'); } | shuf | tr -d '\n' )"
echo "$pw"

Die Ausgabe sähe etwa so aus:

$ bash pw.sh 
WRgpJ7pP%Tj60.1
$ bash pw.sh 
oV6N#7s4Po3Bt)r

Antwort2

Schauen Sie sich anWie erzeuge ich eine zufällige Zeichenfolge?

herbert schlägt vor,/dev/urandom

tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13  ; echo

400 die Cat bietet Lösung mitopenssl

openssl rand -base64 12

Das Problem besteht darin, dass keine dieser Lösungen garantiert, dass Sie alle gewünschten Zeichen (also 2 Ziffern, 2 Sonderzeichen usw.) haben.

Mit shufund basierend auf Ihrem Originalcode können Sie Folgendes tun:

shuf -r -n1 -e {a..z} {A..Z} | tr -d $'\n'; { shuf -r -n2 -e {0..9}; shuf -r -n2 -e {a..z}; shuf -r -n2 -e {A..Z}; shuf -r -n2 -e { \! \" \# $ % \& '\' '/' \( \) \{ \} [ ] \< \> + - = . , : \; ? @ \| \` \~ ^ _ "'" \* }; } | shuf | tr -d $'\n'

Zur besseren Lesbarkeit in Zeilen unterteilt:

shuf -r -n1 -e {a..z} {A..Z} | tr -d $'\n'; 
{ shuf -r -n2 -e {0..9}; 
shuf -r -n2 -e {a..z}; 
shuf -r -n2 -e {A..Z}; 
shuf -r -n2 -e { \! \" \# $ % \& '\' '/' \( \) \{ \} [ ] \< \> + - = . , : \; ? @ \| \` \~ ^ _ "'" \* }; } | shuf | tr -d $'\n'

Dadurch wird eine Zeichenfolge erzeugt, die mit einem Buchstaben beginnt (beachten Sie, dass ich die erste Zeile nicht in die letzte weiterleite shuf) und aus zwei Kleinbuchstaben, zwei Großbuchstaben und zwei Ziffern besteht (insgesamt 9 Zeichen).

Antwort3

Am Ende ist dies der letzte Befehl:

export PASSWORD=$(shuf -r -n1 -e {A..Z} {a..z})$( { shuf -r -n4 -e {A..Z}; shuf -r -n4 -e {a..z}; shuf -r -n4 -e {0..9}; shuf -r -n2 -e $(sed -e 's/./& /g' <<< '@%+\/!#$^?:.(){}[]-_.'); } | shuf | tr -d '\n' )

verwandte Informationen