カテゴリー: bash

  • bashでランダムなパスワードを生成する

    linuxなどでコマンドラインでランダムパスワードを作りたい場合、下記のコマンドを実行する。
    出力される文字列は “,.+-!“の文字列と “12345678” を必ず含む。
    なお、間違い易い “0,9(数字の0,9)”、”O(英字大文字のO)”、”l,o(英字小文字のl,o)”は除いています。

    $ cat /dev/urandom | \
    tr -dc '12345678abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ,.+\-\!' | \
    fold -w 12 | grep -i [12345678] | grep -i '[,.+\-\!]' | head -n 16
    cp,b2yfArrxa
    q2JcSttcqJ.+
    fpRjcSu,8PNQ
    8ej-tk-a7.6T
    6I7,UW6XeYDY
    EyXxFHg+Dx7!
    g1ctyM!qFQtr
    Jf+Q4jSkVdAC
    J2r8YRzI+ZbY
    wq76vyIjQk7!
    yK7z+F7i5b6T
    DiwN7,Qm+Q,-
    8pIP6zTU,3a,
    qjf7.!c5Z1hx
    .msB5Pq13e1,
    Y4zcWNnu,hnP

    これで、12ケタのランダム文字列を16個作成する。
    先頭に記号が来るのが、気持ち悪い場合は下記のようにする。

    $ cat /dev/urandom | \
    tr -dc '12345678abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ,.+\-\!' | \
    fold -w 12 | grep -i [12345678] | grep -i '[,.+\-\!]' | \
    grep -e '^[12345678abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ]' | head -n 16

    パスワードを生成するシェルスクリプトは下記の通り。

    #!/bin/bash
    LEN=$1
    CNT=$2

    if [ -z ${LEN} ] ; then LEN=12 ; fi
    if [ -z ${CNT} ] ; then CNT=16 ; fi

    cat /dev/urandom | tr -dc '12345678abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ,.+\-\!' | fold -w ${LEN} | grep -i [12345678] | grep -i '[,.+\-\!]' | grep -e '^[12345678abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ]' | head -n ${CNT}

    上記のシェルスクリプトの場合、引数としてパスワードの長さと出力数を与えられる。
    引数が無い場合は、12桁のパスワードを16個作成する。