Bashスクリプトでランダムなパスワードを簡単に生成する方法
定期的に新しいパスワードを考える必要がある方は多いでしょう。中にはセキュリティ強度の高いものが求められる場合もあります。しかし、いざ新しいアカウントを作成しようとすると、頭の中が真っ白になってしまうこと少なくありません。そんなときに役立つのが、この短いBashスクリプトです。正直に言うと、このスクリプトの大部分はどこかで見つけたもので、筆者は少し手を加えただけですが、その実用性は十分にあります。
スクリプトの全体像
#!/usr/bin/env sh
echo 'Generating 12-character passwords'
for ((n=0;n<12;n++))
do dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | sed -ne 2p | cut -c-12
done
スクリプトの仕組み
動作原理の細部まですべて理解しているわけではありませんが、調査と実験を重ねることで、ある程度は把握しています。スクリプトの核心となるのは do dd で始まる行です。
dd コマンドはディスク間のコピー用途でよく知られていますが、ここでは /dev/urandom を入力源として、1ブロック分のランダムな文字列を生成するために使われています。まず dd のフィードバックメッセージが取り除かれ、その後、文字列は uuencode に渡されます。uuencode の役割は、すべての文字を印字可能な文字(つまり制御文字を含まない状態)へ変換することです。
なお、uuencode コマンドは sharutils パッケージをインストールすることで利用できるようになります。多くのLinuxディストリビューションでは、標準のパッケージマネージャーから簡単に導入できます。
続く sed は、さらなる変換を行い、大文字と小文字が混在した文字列に整形しているようです。最後に cut が先頭の12文字を切り出し、12文字のパスワードが完成します。for ループが12回繰り返されるため、実行するたびに合計12個のパスワード候補が得られます。
実際の出力例
Generating 12-character passwords
8WMKHeXeYsND
X+V3jWOuBWwp
fSk6inI+LfYP
hIPndcBOSh7m
bb/w9mx8OlHv
hdIOibUaMt3Y
wl//CobIG5bR
dih0qQQMJiXw
BIN2QfNA4jCe
DF0c8Auz1qL4
RM8MMq/D8C8H
rZIG5hbghcMy
この出力例を見ると、英数字がかなりランダムに混ざっていることがわかります。注目すべき点として、英数字以外で登場する記号は /(スラッシュ)と +(プラス)のみです。これは uuencode のBase64エンコード方式によるもので、シェルでの扱いやすさという点でも都合が良い特徴といえます。
パスワードの選び方と活用のコツ
新しいパスワードが必要になったときは、この出力の中から「しっくりくる」ものを選ぶのがおすすめです。特に頻繁に入力するパスワードであれば、いずれ覚えられそうな候補を選んでおくと、後々楽になります。
生成されたパスワードをそのまま使う必要はありません。文字を追加したり、一部を変更したりして自由にカスタマイズしましょう。筆者は主に8文字のパスワードを使っています。また、サービスによっては「小文字・大文字・数字・記号をそれぞれ1つ以上含めること」といった要件が課される場合があるため、その場合は要件に合わせて調整すると良いでしょう。
もし気に入る候補がなければ、スクリプトをもう一度実行して、新たに12個のパスワードを生成すればよいだけです。「/dev/urandom は厳密には疑似乱数しか生成しない」と指摘する人もいるかもしれませんが、それでも人間が自力で考案するよりも、はるかに予測困難で安全なパスワードが得られることは間違いありません。
-
自宅プリンターで両面印刷を自動化!シンプルなBashスクリプトの作り方
私の自宅にはレーザープリンターがあります。Hewlett Packard LaserJet Pro CP1525nwカラープリンターはやや古いモデルですが、何年もの間、安定してカラー印刷をこなしてくれる頼れる働き者です。数年前にRaspberry Piをプリントサーバーとして導入し、家庭内ネットワークに接続しました。 このLaserJetはホームオフィスにとって大きな戦力です。昨年会社を立ち上げて以来、クライアントとの打ち合わせやワークショップ、研修会用の資料印刷には、ずっとこの小さなレーザープリンターにお世話になってきました。 ただ、ひとつだけ不満があります。このプリンターは片面印刷にしか対
-
実用的な5つの例で学ぶBashスクリプト入門チュートリアル
Unix SedやUnix Awkシリーズと同様に、本シリーズではBashスクリプティングに関する記事を複数回にわたって公開します。実用的なサンプルを交えながら、Bashスクリプティングのテクニックを幅広く解説していきます。 シェルとは、ユーザーが入力したコマンドを解釈して実行するプログラムです。コマンドはユーザーが直接入力するか、「シェルスクリプト」と呼ばれるファイルから読み込まれます。 ユーザーからの入力を直接読み取る場合、そのシェルは対話型(インタラクティブ)シェルと呼ばれます。 一方、ファイルからコマンドを読み込んで実行する場合は非対話型(ノンインタラクティブ)シェルと呼ばれます。この