lazy-ssh-agent
概要
sshを使う際に面倒なのが、毎回秘密鍵のパスフレーズを入力しなければならないこと。 バックグランドでパスフレーズ入力済みの秘密鍵を持っておくssh-agentはそんなものぐささんのためにありますが、最初にsshしたいと思ったときに忘れずに
eval `ssh-agent` ssh-addを実行しておく、などという習慣が出来るほど人は(少なくとも私は)賢くありません。 といって、シェルの起動スクリプト(.bashrcなど)にssh-agent && ssh-addを入れておくと、別にsshする用事のないログインでもわざわざパスフレーズを入力させられて本末転倒な感じがします。
このジレンマを解消するべく、ssh-agentをラップする簡単なシェルスクリプトlazy-ssh-agentを書きました。このスクリプトを導入すると、最初にssh/scp/sftpした時点でパスフレーズの入力を要求し、それ以降は入力不要で秘密鍵を扱えます。
導入
ダウンロード
スクリプトをダウンロードします。
$ wget 'http://nanabit.net/x/dl/dl.php?dl=lazy-ssh-agent-1.0.0' -O lazy-ssh-agent
設置
lazy-ssh-agentをPATHの通ったディレクトリ(/usr/local/binなど)におき、実行属性をつけます。
$ sudo chown root:root lazy-ssh-agent $ sudo chmod 0755 lazy-ssh-agent $ sudo mv lazy-ssh-agent /usr/local/bin/
evalして使う関係上、root以外のユーザがlazy-ssh-agentを書き換えられないように注意してください。
起動/終了スクリプトへの追加(bashの例)
.bashrcに以下の記述を追加します。
eval `lazy-ssh-agent setup ssh scp sftp`
ssh, scp, sftpの他に同様の機構で秘密鍵を読ませるべきプログラムがあれば、あわせて列挙します。.bash_logoutに以下の記述を追加します。
eval `lazy-ssh-agent clean`
- これで準備完了です。
動作確認
- 一旦端末エミュレータを閉じます。
- 端末エミュレータを起動し、適当にsshします。ここでパスフレーズを聞かれるはずです。
- ssh先からログアウトし、戻ってきます。
- 再びsshすると、パスフレーズなしでログインできます。
- 端末エミュレータを閉じます。
- 再び端末エミュレータを開き、sshすると(前回終了時に自動的にssh-agentをkillしているので)またパスフレーズを聞かれます。
ダウンロード
| バージョン | 日付 | ダウンロード |
|---|---|---|
| 1.0.0 | 20090405 | lazy-ssh-agent-1.0.0 |
余談
.bash_logoutにeval `lazy-ssh-agent clean`をかかなければ、ログアウトしても秘密鍵を保ち続けますが、攻撃される機会を増やすことにつながるため、避けた方がいいかもしれません。
危険性としては、思いつくだけでも
- 環境変数 USER, ORIGINAL_SSH_ssh 等を変更されたら危ない
- スクリプト書き換えられたら危ない
- .sshagent/.$(hostname)書き換えられたら危ない
これはセキュリティホールだ!という指摘がありましたらご連絡ください。
ssh-agentが生きていると、zshでscpを使うとき、リモート側のファイル名まで補完できます。便利すぎるのでぜひzshを入れましょう。
