前の日 / 次の日 / 最新 / 2007-11

hironyのChangeLog / 2007-11-21

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2007-11-21 Wed

_ さらばSSHKeychain [Mac]

Macでssh-agentを共有(keychainなし) - nak2kのメモ帳
の方法で、SSHKeychainとか使わなくても、ssh-agentを共有する方法、ってのが紹介されてた。
なんというか、なるほど、へぇ、こういう仕組みなんだぁ。普通に環境変数なのね。
おお、できたできた。ありがとうございます!

これで、なにかと不安定だったSSHKeychainとお別れできる。うれしい。お世話になりましたありがとうございます。

上記のサイト設定方法を抜粋。メモとして。

~/.ssh/id_dsaに秘密鍵をセット。
~/.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

~/.MacOSX/environment.plistに


<!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>

これだけ。xxxxxxxには適当な文字列でも。
一度ターミナルを立ち上げると、最初はパスフレーズを聞かれて、あとは他のアプリからもssh-agentが共有される。おお、すばらし。

僕の理解してる仕組み。
.profileの設定によって、一度シェルを起動すると、ssh-agentが起動されて、そのプロセスIDを/tmpに記録。で、ssh-add。
ssh-agentを起動するときにbind-addressをSSH_AUTH_SOCKにしてる。で、それをenvironment.plistで設定してるので、他のアプリからも共用できる、と。
SSH_AUTH_SOCKで指示されてるファイルが「ssh-agentが使用するUnixドメインソケット」、なんですかね?
だからこの場合、「Unixドメインソケット」が「bind-address」、なんですかね。ssh-agentのmanを見ると

     -a bind_address
             Bind the agent to the unix-domain socket bind_address. The
             default is /tmp/ssh-XXXXXXXXXX/agent.<ppid>.

だからそうみたい。
ふーん。納得。勉強になった!

2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2011-04-19 13:05