ssh 鍵のパスフレーズを忘れたら


ssh で鍵のパスフレーズを忘れること、ありませんか? 私は過去に2回ほどあります。 設定したパスフレーズではなぜか使えなかったり、パスフレーズをどこに控えたかを忘れてしまったり。 そんなときに、とても時間がかかりますがブルートフォースでパスワードを当てる方法があります。


使うもの

john the ripper
総当たりをするための候補を作るプログラム。 linux だとパッケージに入っていることが多いです。
ssh-privkey-crack.c
キーの検証を行うプログラム。 コンパイルできる環境が必要です。

手順

  1. lusas というプロジェクトから ssh-privkey-crack.c をダウンロードします。 (執筆時にはダウンロードできていたのですが、時点で同じようにダウンロードできるかはわかりません。)

  2. ダウンロードした ssh-privkey-crack.c をコンパイルします。 コンパイルの方法はプログラム内のコメントに書かれています。 私の環境では gcc -Wall -o ssh-privkey-crack ssh-privkey-crack.c -lssl -lcrypto でコンパイルできました。 コンパイル後のファイルには実行権限をつけておきます。

  3. john the ripper をダウンロードして設定ファイルを編集します。 私の環境(ubuntu)では /etc/john/john.conf がデフォルトの設定ファイルになっていました。 それに追記する形で設定を追加しました。

    総当たりをする場合の設定です。 File の指定は存在する chr ファイル を指定し、 Extra に chr ファイル 外 の文字で使用する文字を記述します。 chr ファイル の作り方がいまいち把握できていないのでこのようにしました。 MinLen 、 MaxLen はパスフレーズの長さの範囲を指定します。 CharCount で使用する文字の総数を記述します。 今回は 数字と大文字、小文字なので 62 です。 chr ファイルは私の環境だと /usr/share/john/ にありました。

  4. コマンド john -stdout -incremental:Pattern1 | ./ssh-privkey-crack ssh-private-keyfile を実行します。 最後に “-v” をつけると詳細なアウトプットが出せます。 (実際のところ MinLen = 3, MaxLen = 10, CharCount = 62 だとまず終わらないです。)