最近の更新

関連


その他いろいろ

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

はやくMODx 2.0でないかなあ

lazy-ssh-agent

必要になるまでパスフレーズを要求しないssh-agent
初出:2009年04/05 更新:2009年04/06

この文書のキーワード: なし

概要

sshを使う際に面倒なのが、毎回秘密鍵のパスフレーズを入力しなければならないこと。 バックグランドでパスフレーズ入力済みの秘密鍵を持っておくssh-agentはそんなものぐささんのためにありますが、最初にsshしたいと思ったときに忘れずに

eval `ssh-agent`
ssh-add
を実行しておく、などという習慣が出来るほど人は(少なくとも私は)賢くありません。 といって、シェルの起動スクリプト(.bashrcなど)にssh-agent && ssh-addを入れておくと、別にsshする用事のないログインでもわざわざパスフレーズを入力させられて本末転倒な感じがします。

このジレンマを解消するべく、ssh-agentをラップする簡単なシェルスクリプトlazy-ssh-agentを書きました。このスクリプトを導入すると、最初にssh/scp/sftpした時点でパスフレーズの入力を要求し、それ以降は入力不要で秘密鍵を扱えます。

導入

  1. ダウンロード

    スクリプトをダウンロードします。

    $ wget 'http://nanabit.net/x/dl/dl.php?dl=lazy-ssh-agent-1.0.0' -O lazy-ssh-agent
    

  2. 設置

    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を書き換えられないように注意してください。

  3. 起動/終了スクリプトへの追加(bashの例)

    .bashrcに以下の記述を追加します。

    eval `lazy-ssh-agent setup ssh scp sftp`
    
    ssh, scp, sftpの他に同様の機構で秘密鍵を読ませるべきプログラムがあれば、あわせて列挙します。

    .bash_logoutに以下の記述を追加します。

    eval `lazy-ssh-agent clean`
    

  4. これで準備完了です。

動作確認

  1. 一旦端末エミュレータを閉じます。
  2. 端末エミュレータを起動し、適当にsshします。ここでパスフレーズを聞かれるはずです。
  3. ssh先からログアウトし、戻ってきます。
  4. 再びsshすると、パスフレーズなしでログインできます。
  5. 端末エミュレータを閉じます。
  6. 再び端末エミュレータを開き、sshすると(前回終了時に自動的にssh-agentをkillしているので)またパスフレーズを聞かれます。

ダウンロード

バージョン日付ダウンロード
1.0.020090405lazy-ssh-agent-1.0.0

余談

.bash_logoutにeval `lazy-ssh-agent clean`をかかなければ、ログアウトしても秘密鍵を保ち続けますが、攻撃される機会を増やすことにつながるため、避けた方がいいかもしれません。

危険性としては、思いつくだけでも

などが考えられますが、スクリプトや設定ファイル自体は言うに及ばず、環境変数書き換えられたら危ないのは何でもそうですし、設定ファイルはumask 0066しているので、普通に使っていれば大丈夫なような気はします。

これはセキュリティホールだ!という指摘がありましたらご連絡ください。

ssh-agentが生きていると、zshでscpを使うとき、リモート側のファイル名まで補完できます。便利すぎるのでぜひzshを入れましょう。