/dev/urandom を使ったパスワード生成
/dev/urandom
を使用してランダムなバイト列を生成し、ascii文字列のみを抽出してパスワードを生成する。
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?' | fold -w 20 | head -n 1
'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?'
の部分に使用したい文字セットを指定する。
生成されるパスワードの長さはfold -w
の引数に指定する。上記の場合は20文字のパスワードが生成される。
パイプで繋いでいる各コマンドは以下の通り動作する。
cat /dev/urandom
:/dev/urandom
からランダムなバイト列を読み取る。tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?'
:tr
コマンドで指定した文字セット(a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?
)以外(-c
)の文字を削除(-d
)する。fold -w 20
:fold
コマンドで20文字ごとに折り返す。指定した長さのパスワードを生成するために指定している。head -n 1
:head
コマンドで最初の1行を取得する。
macOSでのエラー
macOSのtrコマンドでは以下のエラーが発生する。
tr: illegal byte sequence
その場合はtr
コマンドにLC_ALL=C
を設定して実行する。
$ cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?' | fold -w 20 | head -n 1
注意点
単純にランダムな文字列のうち有効文字の先頭から取得しているので、生成されたパスワードに必ずしも大文字・小文字・記号が混合されるとは限らない。
セキュリティ要件に応じて生成されたパスワードを確認し、必要に応じて再生成する必要がある。
opensslを使ったパスワード生成
openssl
コマンドを使用してランダムなパスワードを生成する。
$ openssl rand -base64 20
-base64
オプションを使用することで、Base64エンコードされたランダムなバイト列を生成する。
base64エンコードであるため、使用される文字は英数字と+
、/
、=
のみ。
そのため/dev/urandom
を使った方法と比べて文字種を自由に指定できない。
\第一線のプログラマーの行動原理を学べる!/