Я соединяюсь с продолжительной экранной сессией на сервере Ubuntu 12.04 и использованием, с которым как поле перехода для других вещей я соединяюсь. В результате я хочу продолжительный ssh-агент на той машине. С этой целью у меня есть следующее в моем .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
Итак, почему heck не это соединение? Я владею сокетом:
$ ls -la .ssh-auth-sock
srw------- 1 pdickey pdickey 0 Mar 10 04:33 .ssh-auth-sock=
Я даже пошел, насколько к strace процесс, который после отсеивания посредством всех загрузок библиотеки, обеспечивает главным образом бесполезный бит информации:
64962 connect(3, {sa_family=AF_FILE, path="/home/pdickey/.ssh-auth-sock"}, 110) = -1 ECONNREFUSED (Connection refused)
Это - теперь предел моего Linux / человечность / ssh знание. Почему был бы сокет, которым я владею, созданный процессом, я владею, отказываюсь от соединения от другого процесса, которым я владею?
Так оказывается, что это - результат решения зашифровать мои корневые каталоги и размещение подлинного носка там... Это означает, когда я полностью отсоединяюсь с экрана, мои под управлением программы теряют доступ к моему корневому каталогу, который повреждает ssh-агент. Это не уничтожает процесс ssh-агента как удаление сокета, обычно делает, и это не удаляет сокет, потому что это находится в зашифрованном каталоге, к которому больше не может получать доступ машина. Это также проявляет другие причуды как мой демон крона, не бывший способный выполнять сценарии в моем корневом каталоге, если я не зарегистрирован.