🐚

macOS のシェルスクリプトで使える、ランダムな文字列を生成するいくつかの方法

2024/01/09に公開

シェルスクリプトでパスワードやシークレット文字列を自動的に生成したいときに使えるコマンドラインです。

基本的なアプローチ

  • 擬似乱数生成器として /dev/urandom を用いる
    • /dev/urandom は暗号論的擬似乱数生成器として使えたはずなので、パスワードを生成する目的で利用しても問題ないはず…
  • head -c バイト数 コマンドで、必要な量のランダムなバイトシーケンスを得る
  • バイトシーケンスを base64 コマンドや xxd コマンドで printable な文字列に変換する

具体例

Base64 エンコードされたランダムな文字列を得る

Base64 エンコードの都合上、文字列中に +/ の文字や文字列末尾にパディングの = が付加されることがあるので、それらの文字が含まれると都合が悪い場合は別の文字に置き換えるなどしてください。

$ head -c 18 </dev/urandom | base64
iaAx3z9i7PSYkpVsoVYfDnYm

# バイトシーケンスの長さが 3 の倍数でない場合にパディング文字 = が付加されるので、tr を用いて取り除く
$ head -c 7 </dev/urandom | base64 | tr -d '='
tt4bCd37nA

16進数のランダムな文字列を得る

# xxd コマンドは 60 文字ごとに行を折り返すので、改行を除去するために tr コマンドを用いている
$ head -c 32 </dev/urandom | xxd -p | tr -d '\n'
05814e7c860e044ec1aa59be6db4d5443ae61e46972ed6f8b4846ba6b7f552e8

UUID で十分な場合

uuidgen コマンドを使いましょう。

$ uuidgen
BF8374B3-5EE3-48DC-B825-8E32F554986A

Discussion