SSH秘密鍵のSSH-AGENTをつかった管理ベストプラクティスを考えてみた
Posted in Linux
暗号化された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を使っていれば入ってるはず。
- ssh-agentを使えば、毎回パスレーズを入力しなくても1回入力しただけで覚えててくれる
- 秘密鍵のパスフレーズ入力をスルーする
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