実行中のssh-agentに接続できません


1

Ubuntu 12.04サーバーで長時間実行されるスクリーンセッションに接続し、それを他の接続先のジャンプボックスとして使用しています。その結果、そのマシンで長時間実行されるssh-agentが必要です。そのために、私は.bashrcに以下を入れています:

pgrep -u pdickey ssh-agent > /dev/null || ssh-agent -a $HOME/.ssh-auth-sock
SSH_AUTH_SOCK=$HOME/.ssh-auth-sock
export SSH_AUTH_SOCK

スクリーンセッションが切断されない限り、これは完全に機能します。新しい画面を生成することができ、それらはすべて同じエージェントを取得します。元のsshセッションがあるマシンから切断すると問題が発生します。再接続すると、次のメッセージが表示されます:

$ ssh-add -l
Could not open a connection to your authentication agent.

これについてわかったことはすべて、エージェントが実行されていないときに発生していることを示しているようですが、エージェントが実行中であり、$ SSH_AUTH_SOCK変数が設定されていることを確認できます:

$ ps -fu pdickey | grep ssh-agent
pdickey    435     1  0 04:11 ?        00:00:00 ssh-agent -a /home/pdickey/.ssh-auth-sock
$ echo $SSH_AUTH_SOCK
/home/pdickey/.ssh-auth-sock

それでは、なぜ一体なのですか。私はソケットを所有しています:

$ ls -la .ssh-auth-sock 
srw------- 1 pdickey pdickey 0 Mar 10 04:33 .ssh-auth-sock=

私は、すべてのライブラリロードをふるいにかけた後、ほとんど役に立たない情報を提供するプロセスまでたどり着くまで行ってきました。

64962 connect(3, {sa_family=AF_FILE, path="/home/pdickey/.ssh-auth-sock"}, 110) = -1 ECONNREFUSED (Connection refused)

これが私のlinux / ubuntu / ssh知識の限界です。所有しているプロセスによって作成された、所有しているソケットが、所有している別のプロセスからの接続を拒否するのはなぜですか?

1

So turns out this is a result of deciding to encrypt my home directories, and placing the auth-sock there... This means when I fully detach from screen, my running programs lose access to my home directory, which breaks ssh-agent. It doesn't kill the ssh-agent process like deleting the socket normally does, and it doesn't remove the socket because it's in an encrypted directory that the machine can no longer access. This also manifests other oddities like my cron daemon not being able to run scripts in my home directory if I'm not logged in.