暗号化されたSSH秘密鍵のパスフレーズ入力を出来る限り省略、なおかつ安全に運用する

  • SSH秘密鍵のパスフレーズは必要
  • しかも11文字以上の長いものが推奨される
  • sshやgitのたびにパスフレーズをいちいち入力するのは大変
  • ssh-agentのプロセスを管理する
  • 必要なときにだけパスフレーズを入力(シェル起動時に入力とかしたくない)
  • ssh-addされた鍵を一定時間で自動消去

SSH秘密鍵にちゃんとパスフレーズをつけよう。

  • SSH接続に公開鍵認証を取り入れるのは当然ですが、秘密鍵にちゃんとパスフレーズつけてますか?
  • (※もちろんパスワードログインはちゃんとOFFにしてね!)
  • パスフレーズをめんどくさくて付けていない場合はPCやUSBメモリなんかに入った秘密鍵が漏れたら即アウトです。

パスフレーズちゃんとつけてます!

  • 何文字のパスフレーズを付けていますか?
  • 短いパスフレーズは↓くらいの時間で解除できるという実験結果もでてます。

SSH秘密鍵のパスフレーズは(つけるなら)11文字以上にしましょうねという話

CPU Intel Core i7 2.67GHz
(実験では1コアしか使っていない)

パスフレーズ文字数 解析にかかった時間
5文字 8秒
6文字 480秒
7文字 8時間
8文字 20日
9文字 3.3年
10文字 197年

ssh-agent

ssh-agentの問題点

  • 登録するときssh-addコマンドで秘密鍵ファイルを登録しなければいけない
  • 登録するとずっと生の秘密鍵が残ってしまい明示削除しなければずっと使える状態のまま
  • ssh-agentを一度起動すると、ログアウトしてもプロセスが残ったままになる
  • 解答された鍵ファイルはプロセスごとに残っているのでプロセスを再利用する必要がある

ssh-agentをプロセス管理して自動立ち上げ

  • .bashrcに書き込んで、シェル立ち上げ時にプロセスがなければ立ち上げる
  • 立ち上げたプロセスの情報を ~/.ssh-agent ファイルに保存
  • プロセスがあればそれを再利用
  • ファイルの有効時間を設定
#有効時間(好きな秒数に設定)
SSH_KEY_LIFE_TIME_SEC=3600
SSH_AGENT_FILE=$HOME/.ssh-agent
test -f $SSH_AGENT_FILE && source $SSH_AGENT_FILE > /dev/null 2>&1
if [ $( ps -ef | grep ssh-agent | grep -v grep | wc -l ) -eq 0 ]; then
    ssh-agent -t $SSH_KEY_LIFE_TIME_SEC > $SSH_AGENT_FILE
    source $SSH_AGENT_FILE > /dev/null 2>&1
fi

実際に使われるときにパスフレーズを入力させる設定

  • ~/.ssh/configのサーバー設定にAddKeysToAgent yes
  • .bashrcにてssh-agent -t secをしたのは.ssh/configには有効時間が設定できなかったため
    Host my-server
        HostName myhost.mydomain.jp
        User taro
        IdentityFile ~/.ssh/taro_secret_key
        AddKeysToAgent yes
    

ログオフの際にssh-agentのプロセスを終了させる。

このままだとログオフしても鍵が保存されたままになってしまうので、
ログオフ時にプロセスを自動で終了させる。

    ssh-agent -k

有効時間の前にssh-agentに登録されている鍵を削除する

  • 現在、登録されている鍵を一覧
    • ssh-add -l
  • 特定の鍵を削除
    • ssh-add -d [key_file_path]
  • 全削除
    • ssh-add -D


この記事のトラックバック用URL - http://mashi.exciton.jp/archives/250/trackback