個人的なまとめ。

何かてきとーに書きます。

シェルスクリプトでランダムなパスワードを生成する:ワンライナー

シェルスクリプトでランダムなパスワードを生成する

/dev/randomか/dev/urandomといくつかのコマンドを用いて簡単にランダムなパスワードを生成できる.そうLinuxならね.
/dev/randomと/dev/urandomの違いは,以下の記事がわかりやすい.

oplern.hatenablog.com


ここでは,/dev/urandomを使う.中身を見てみると,なんやらわからない出力が得られるはず.

cat /dev/urandom

これをtrコマンドに入れる.trコマンドは本来文字を置き換えるためのコマンドで,指定した文字の削除や連続した文字を1つにまとめたりするのに使う.

cat /dev/urandom | tr -dc 'a-zA-Z0-9'

これで無尽蔵にランダムな英数字が得られる.記号も含めたいのであれば以下のように記号も割り当てる.

cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?'

ここから,foldコマンドを使って指定した文字列で文字を区切る.例えば32文字で区切りたい場合は以下のようにする.

cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?' | fold -w 32

これで無尽蔵に32文字のランダムな英数字が得られる.ランダムなパスワードが1つしか必要ない場合は,その先頭行のみを取り出せば良いので,headコマンドを使う.

cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?' | fold -w 32 | head -n 1

こうすればランダムな32文字のパスワードが得られる.あとはこれをシェルスクリプトで使えば良い.

#!/bin/sh

password=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?' | fold -w 32 | head -n 1)