/ 2007-11-2101 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
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