ssh-agentの注意点

ssh-agentを一度起動すると、ログアウトしてもプロセスが残ったままになるので要注意。

########################################################################
## 実証 : ssh-agentを一度起動するとログアウトしてもプロセスは残ったまま
########################################################################
## 検証環境
ubuntu1410@ubuntu1410:~$ uname -a
Linux ubuntu1410 3.16.0-23-generic #31-Ubuntu SMP Tue Oct 21 17:56:17 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

## ログインしてssh-agentを起動する、その後ログアウト
ubuntu1410@ubuntu1410:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-rHUra7orSbjX/agent.1503; export SSH_AUTH_SOCK;
SSH_AGENT_PID=1504; export SSH_AGENT_PID;
echo Agent pid 1504;
ubuntu1410@ubuntu1410:~$ ps -aef |grep ssh-agent
ubuntu1+  1504     1  0 23:26 ?        00:00:00 ssh-agent
ubuntu1+  1506  1470  0 23:26 pts/1    00:00:00 grep --color=auto ssh-agent
ubuntu1410@ubuntu1410:~$ exit

## 再ログインしてプロセスを調べると、前回ログイン時のプロセスが残っている
ubuntu1410@ubuntu1410:~$ ps -aef |grep ssh-agent
ubuntu1+  1504     1  0 23:26 ?        00:00:00 ssh-agent
ubuntu1+  1578  1561  0 23:27 pts/1    00:00:00 grep --color=auto ssh-agent

# /tmpの下にもファイル(ソケット)が残ったままの状態
ubuntu1410@ubuntu1410:~$ ls -lR /tmp/
/tmp/:
合計 4
drwx------ 2 ubuntu1410 ubuntu1410 4096  420 23:26 ssh-rHUra7orSbjX

/tmp/ssh-rHUra7orSbjX:
合計 0
srw------- 1 ubuntu1410 ubuntu1410 0  420 23:26 agent.1503

プロセスをkillするには単純にkillコマンドでも良いが、せっかくなのでssh-agentでkillしてみる。

## ssh-agentのプロセスをkillする
# まずは環境変数SSH_AGENT_PIDを設定する(ssh-agentを起動した時のコンソール出力参照)
ubuntu1410@ubuntu1410:~$ SSH_AGENT_PID=1504; export SSH_AGENT_PID;
# agentをkillする
ubuntu1410@ubuntu1410:~$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 1504 killed;

# プロセスが消えた
ubuntu1410@ubuntu1410:~$ ps -aef |grep ssh-agent
ubuntu1+  1655  1561  0 23:41 pts/1    00:00:00 grep --color=auto ssh-agent
# /tmpにあったファイル(ソケット)も消えた
ubuntu1410@ubuntu1410:~$ ls -lR /tmp/
/tmp/:
合計 0

残っているプロセスを再利用するなら、環境変数を設定すれば良い。

## 残っているssh-agentのプロセスを再利用するには
## 環境変数 SSH_AGENT_PID と SSH_AUTH_SOCK を再設定すれば良い
ubuntu1410@ubuntu1410:~$ SSH_AGENT_PID=1709; export SSH_AGENT_PID;
ubuntu1410@ubuntu1410:~$ SSH_AUTH_SOCK=/tmp/ssh-uEZcqFuwDSKJ/agent.1708; export SSH_AUTH_SOCK;

# agentに登録済みの鍵を調べれば、どのプロセスを再利用するのか探るのに役立つかも
ubuntu1410@ubuntu1410:~$ ssh-add -l
2048 46:08:71:de:3d:ef:38:3b:5b:7a:96:7b:7a:82:b0:f0 id_rsa_ubuntu (RSA)
2048 0e:f4:77:b2:3d:0f:2d:e5:ca:a2:54:ca:3d:36:f9:f7 .ssh/id_rsa (RSA)

参考
http://d.hatena.ne.jp/flying-foozy/touch/20111206/1323160144