[小ネタ] 作業用のパスワードっぽい文字列を CLI で手軽に作成する (openssl編)

2017.10.31

AWSに限らず、日々の仕事でパスワードを量産しなくてはならない場面にはよく出くわします。

そんなときは世にあるパスワードジェネレータなどを使ってもいいんですが、OpenSSL のコマンドがあれば、CLI でそれっぽい文字列を手軽に生成できます。

openssl rand

実際に生成してみます。12文字の英数大文字小文字、たまに記号(/+)が混じります。

$ openssl rand -base64 9
SqJeCBfTm/i5

macOS には最初から openssl コマンドがインストールされていると思います。

解説

opensslrand サブコマンドは、いわゆる疑似乱数を出力するコマンドです。今回のコマンドでは 9 バイト分のバイナリデータが出力されます。

これに -base64 オプションが付いているので、このバイト列は BASE64 エンコードされます。

上記 URL 先にあるように、BASE64 はバイナリデータを ASCII 文字列に変換する方式のことです。変換後に使用される文字は下記に限定されます。

  • アルファベット (az, AZ)
  • 数字(09
  • 記号(/+

また変換によって、バイト数は 4/3 に増えます。今回 9 バイトを指定したものの、最終的に 12 文字出力されたのはこのためです。

単純な英数文字よりは、記号が混じる分だけ強度はあがります。初期パスワード・作業用の捨てパスワードと割り切れば十分じゃないでしょうか。

応用

出力する文字列長を変更するのは簡単です。4の倍数でないと難しいですが、、

$ openssl rand -base64 12
SBpXr3yn0rYNREnH            # 16文字

$ openssl rand -base64 6
cIY+kVwF                    # 8文字

任意の文字数で出力したい場合には、長めに出力してfoldコマンドで切り取れば良いでしょう。

$ openssl rand -base64 30 | fold -w 30 | head -1
634O44pgDTapSH2bu3WuEI9oY1dmw/  # 30文字

BASE64 エンコードを使うので、文字種を変更するのは難しいですが、
例えば一部の「パスワードに使いたくない」文字を別の記号に置き換えるなら、tr コマンドが使いやすいでしょう。

$ openssl rand -base64 9 | tr '1iI0O' '@*#$='
6xSZV8$Ag@EA

この例では 1@ に、i* に・・・という感じで置き換えます。

そこまで凝るんなら別のパスワードジェネレータ使った方がいいかとも思いますが、スクリプトで自動生成させるならこういうやり方もありかと。

ちなみに当ブログでは過去にパスワードを扱った記事もありますので、こちらもご参照下さい。

【Mac初心者向け】pwgenで安全なパスワードを簡単に生成しよう

パスワードの作成や管理に悩んだときに思い出していただきたいアイデア

謝辞

BASE64 でパスワードを生成する方法は実はわたしのオリジナルというわけではなくて、
弊社のとある作業手順書に書かれていたものです。

正直いいアイディアだと思ったので、ご紹介がてら記事にさせて頂きました。どなたかのお役にも立ちますように。

まとめ

  • openssl を使えば楽にパスワードっぽい文字列を生成できます
  • なるべくならちゃんとしたパスワードジェネレータ使いましょう
  • admin1234 とか p@ssw0rD とかもう見たくないです