Macでssh-agentを共有(keychainなし)

~/.bash_profile に、

if [ ! -S ${SSH_AUTH_SOCK} ]; then
  eval `ssh-agent -a ${SSH_AUTH_SOCK}`
  echo ${SSH_AGENT_PID} > /tmp/ssh_agent_pid
  ssh-add
else
  export SSH_AGENT_PID=`cat /tmp/ssh_agent_pid`
fi

以上を追加して、~/.ssh/id_dsaに秘密鍵をセット。

また、~/.MacOSX/environment.plistには、以下のような環境変数の設定を記述する。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
 <dict>
  <key>SSH_AUTH_SOCK</key>
  <string>/tmp/.ssh_auth_xxxxxxx</string>
 </dict>
</plist>

これで、ターミナルを起動するだけで、ssh-agentが使用するUnixドメインソケットがなければssh-agentを起動して秘密鍵を追加。
そうでなければすでにssh-agentが存在するので、新たにssh-agentを起動せずにそれを使用(ただし、ssh-agent -kに備えた環境変数の設定は行う)することができるよ。

環境変数SSH_AUTH_SOCKの設定をenvironment.plistを使って行っているので、最初に一度だけターミナルを起動すれば、あとはMacOS上のアプリケーションについてもシェルから起動しなくてもssh-agentを共有することが可能。

まぁ、keychainが行っていることと同じことをやってるんだろうけどな。