SuSe 12で任意の複雑なパスワードを作成する方法

SuSe 12で任意の複雑なパスワードを作成する方法

次の要件に従って、任意のパスワードを生成する方法が必要です。

  • パスワードは9文字以上でなければなりません。
  • 大文字2個以上
  • 小文字2つ以上
  • 少なくとも2桁
  • 特殊文字2個以上
  • 文字で始める必要があります。

これは私のコマンドです:

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

しかし、特殊文字が欠けています。

オペレーティングシステムはSuSE 12です。

答え1

shuf中括弧の拡張や類似の範囲を使用せずに、他の文字を使用して特殊文字を追加できます。

ただし、明示的に1つずつ一覧表示して引用することで、シェルから保護できます。

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

または、文字列に入れてトークン化を使用して複数のパラメータに入れます。ただし、グローブを無効にする必要がありますset -f。そうしないと、アスタリスクが原因で問題が発生します。

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

(または誰もがするように、固定された2つの特殊文字を合理的なパスワードの末尾に追加するだけです。


最初の文字が文字であることを確認する最も簡単な方法は、文字だけを追加してから、残りのパスワードに対して文字を混ぜることです。たとえば、これはパスワードを2つの部分に分割します。最初の部分は単一文字(大文字または小文字)で、2番目の部分はコメントに入力したものです。

#!/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"

出力は次のとおりです。

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

答え2

見てランダムな文字列を生成する方法は?

Herbertは以下を使用することをお勧めします。/dev/urandom

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

400 Catのソリューションopenssl

openssl rand -base64 12

問題は、これらの解決策のどれもが必要なすべての文字(2つの数字、2つの特殊文字など)をすべて備えていることを保証しないことです。

shufソースコードを使用し、それに基づいて次のことを行うことができます。

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'

読みやすくするために複数行に分けてください。

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'

これにより、文字で始まり(最初の行を最後の行にパイプしなかったことに注意してくださいshuf)、2つの小文字、2つの大文字、2つの数字(合計9文字)で構成される文字列が生成されます。

答え3

最後に、最後のコマンドは次のようになります。

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' )

関連情報