パスワードpwgen
を生成しようとしましたが...正確な単語と数を生成するのに十分ではありません...makepasswd
pwgen -c -n -y -B 12 1
最小数を定義できないため、期待どおりに機能しません。
各テキストタイプに許可される最小文字と最大文字を定義したいのですが...これには機能がありますか
?他の提案ツールはありますか?最も広く使用されているシェルスクリプト...(正規表現を使用)crunch
事前にありがとう
答え1
動作するまでこれを実行します(正規表現のマッチングをサポートするbashの最新バージョン=~
)。
unset pass;
until [[ \
$pass =~ [0-9].*[0-9] &&
$pass =~ [A-Z].*[A-Z] &&
$pass =~ [^A-Za-z0-9] \
]]; do
pass=$(LC_ALL=C pwgen -c -n -y -B 12 1)
done
たとえば、
$ unset pass; until [[ $pass =~ [0-9].*[0-9] && $pass =~ [A-Z].*[A-Z] && $pass =~ [^A-Za-z0-9] ]]; do pass=$(LC_ALL=C pwgen -c -n -y -B 12 1); done; echo $pass
AhP4eej3bie#
私が「記号」を「文字でも数字でもない」と定義したことに注意してください。必要に応じて、より制限的なものを選択できます。
シェルが正規表現の一致をサポートしていない場合は、次のようにします。
$ perl -le 'until ($pass =~ /\d.*\d/ && $pass =~ /[A-Z].*[A-Z]/ && $pass =~ /[^A-Za-z0-9]/){chomp($pass=`LC_ALL=C pwgen -c -n -y -B 12 1`)}; print "$pass"'
iep7EJ-o9ahf
答え2
PerlモードでGNU grepをインストールした場合は、制限に従ってパスワードを生成できます。
$ < /dev/urandom \
tr -cd '[:alnum:][:punct:]' | fold -w 12 |
grep -Pm1 '(?=.*[[:upper:]].*[[:upper:]])(?=.*[[:digit:]].*[[:digit:]])(?=.*[[:punct:]])'
A09B?~WR~$#J