
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>.
だからそうみたい。
ふーん。納得。勉強になった!