目次

Macでコマンドでパスワードを生成する方法


tr: Illegal byte sequence がでないようにする。今日学んだこと。

コマンドラインでランダムなパスワードを生成する。

1Passwordなどを利用せずとも、ランダムなパスワードをサクッと生成したい時のコマンド。

/dev/random/dev/urandomのどちらを利用しても良さそう。/dev/random/dev/urandomの違いは調べたけれども正直よくわからなかった。 (また後日確認する)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 英字のみ16桁を1つ生成する

$ cat /dev/urandom |LC_CTYPE=C tr -dc '[:alnum:]' | fold -w 16 |head -n 1
J8gO7NDoHcjK5loj

# 記号入り(制限なし)の17桁を2つ生成する

$  cat /dev/urandom |LC_CTYPE=C tr -dc '[:graph:]' | fold -w 17 |head -n 2
mLd<nwId7H!Ch(Zj\
Jk5;qaOh>bOIG-.~~

# 英数字と特定の記号を利用した20桁のパスワードを1つ作成する

$ cat /dev/urandom | LC_CTYPE=C tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?' | fold -w 20 |head -n 1
fZ!L)rK1WkEZS0,OD=8-

コマンド解説

cat /dev/urandom コマンド

cat /dev/random でも可能

実行するとターミナルが埋まる。乱数を表示する

tr コマンド

文字を置き換えるためのコマンド。

tr -dc Aの意味

  • Aに含まれない文字列を削除する。
    • すなわち tr -dc 'a-zA-Z0-9!@#$%^&*()_+-=[]{}<>?'の時はa-zA-Z0-9!@#$%^&*()_+-=[]{}<>?以外の文字列を削除する。
  • [:alnum:] – 英字(大文字小文字)のみ
  • [:graph:] – 表示可能な文字のみ

その他のオプションは以下

man tr より抜粋

[:class:] Represents all characters belonging to the defined character class. Class names are:

            alnum        <alphanumeric characters>
            alpha        <alphabetic characters>
            blank        <whitespace characters>
            cntrl        <control characters>
            digit        <numeric characters>
            graph        <graphic characters>
            ideogram     <ideographic characters>
            lower        <lower-case alphabetic characters>
            phonogram    <phonographic characters>
            print        <printable characters>
            punct        <punctuation characters>
            rune         <valid characters>
            space        <space characters>
            special      <special characters>
            upper        <upper-case characters>
            xdigit       <hexadecimal characters>

fold -w 16 の意味

16桁で折り返す(改行)

head -n 1 の意味

1行目のみを出力する。

まとめると

cat /dev/urandom |LC_CTYPE=C tr -dc '[:alnum:]' | fold -w 16 |head -n 1

乱数を表示して、英数字以外を削除して、16桁で折り返して、1行目のみ出力する。

参考 https://pasela.hatenablog.com/entry/20120710/random https://hacknote.jp/archives/24837/ https://ja.wikipedia.org/wiki//dev/random http://itdoc.hitachi.co.jp/manuals/3021/30213B3220/0394.HTM