Я бы хотел поместить файл сокета, который создает ssh-agent, в каталог, отличный от / tmp. Если вы посмотрите на справочную страницу, там упоминается $ TMPDIR, поэтому можно сделать вывод, что установка этой переменной среды позволит это сделать. Я попробовал это:
$ export TMPDIR=$HOME/.ssh
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-gZSxgCXIOMVK/agent.4287; export SSH_AUTH_SOCK;
SSH_AGENT_PID=4288; export SSH_AGENT_PID;
echo Agent pid 4288;
и
$ TMPDIR=$HOME/.ssh ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-cv6U38tey4XQ/agent.5160; export SSH_AUTH_SOCK;
SSH_AGENT_PID=5161; export SSH_AGENT_PID;
echo Agent pid 5161;
Как видите, ssh-agent игнорирует TMPDIR и помещает файл сокета в /tmp.
.
Я посмотрел (я клонировал его, затем запустил grep) источник ssh-agent (git@github.com: openssh / openssh-portable.git) и искал TMPDIR. У меня был один удар в функции mktemp_proto (misc.c: 1401). Он ищет переменную среды TMPDIR и использует ее, если она определена, в противном случае использует / tmp. Вызывающая сторона mktemp выглядит так, как будто она вызывает, затем создает каталог сокета, а затем создает файл сокета. Это выглядит хорошо.
Моя следующая мысль заключалась в том, что используемая мной версия старше, чем когда эта функция была добавлена. Глядя на репозиторий github, упомянутый выше, я определил, что он был добавлен в версии 5.8 2011/01/12. Запуск строк на исполняемом файле
$ cat /usr/bin/ssh-agent | strings | grep OpenSSH
выводит несколько строк, включая эту
OpenSSH_6.6.1
Итак, исполняемый файл - не менее 6.6.1. Выполнение подобного grep на TMPDIR находит один удар. Итак, этот исполняемый файл должен использовать TMPDIR.
Я сделал все это на Ubuntu 14.04 LTS.
Итак, мой вопрос: как мне заставить ssh-agent создать файл сокета в каталоге по моему выбору?