休日更新の備忘録

休日のみ更新予定の個人的備忘録置き場

【Windows10】【Ubuntu】【sh】複雑なパスワードを自動生成する

if [ $# -eq 0 ]; then
    echo "引数1にパスワード長を入力してください。"
    exit 9
fi

pwdLen=$1

expr "$pwdLen" + 1 > /dev/null 2>&1

if [ $? -ge 2 ]; then
    echo "引数1には正の整数を入力してください。"
    exit 9
fi

pwgen -s -y $pwdLen 1 > ./output/`date +"%Y%m%d%H%M%S"`_password.pwd
ret=$?

if [ $ret -ne 0 ]; then
    echo "パスワード生成に失敗しました。"
else
    echo "パスワードを生成しました。"
fi

複雑なパスワードを自動生成する

ここではWindows Subsystem for Linux(以降、「WSL」と呼ぶ)の「Ubuntu」で複雑なパスワードを自動生成するシェルスクリプトについて説明します。
WSLの有効化方法やUbuntuのインストール方法については後日記事を作成するつもりです。

今回はすでにWSLが有効化され、Ubuntuがインストールされていることを前提に話をしていきます。

「pwgen」をインストールする

パスワードの自動生成には「pwgen」というコマンドを利用していきます。

以下のコマンドをUbuntu上で実行し、「pwgen」をインストールします。
sudo apt install pwgen
すると「pwgen」コマンドのインストールが開始され、プロンプトが返ってきたらインストール完了になります。
(「sudo」コマンドの初回実行時にはパスワードを求められますが、この時はUbuntuインストール時に作成したユーザのパスワードを入力します。)

インストールが完了したら「pwgen」コマンドを実行してみてください。
pwgen
すると8文字の文字列(パスワード)が表示されるはずです。

複雑なパスワードを自動生成するシェルスクリプトを作成する

上記でインストールしたコマンドを利用し、複雑なパスワードを自動生成するシェルスクリプトを作成します。

冒頭のコマンドでの比較演算子や$に続く数字や記号の意味については後日記事を作成するつもりです。
ここでは
pwgen -s -y $pwdLen 1 > ./output/`date +"%Y%m%d%H%M%S"`_password.pwd
の一文について説明します。

pwgenコマンドのオプションは、ここではそれぞれ以下のような意味を持っています。
-s : 完全にランダムにする
-y : 記号を含める
$pwdLen : パスワードの文字長
1 : 1個生成する
これをリダイレクト( > )して、 outputフォルダの日時名称のファイルに出力するようにしています。

この拡張子がpwdのファイルをテキストエディタで開くと、指定した文字長のパスワードが記載されています。

Windows側のテキストエディタスクリプトを作成した際など、改行コードが「CRLF(\r\n)」の場合エラーになります。(Linux系だと当然ですが...)
改行コードは「LF(\n)」になるよう設定をしておきましょう。