PAM и ssh-agent

Захотелось, чтобы можно было входить в систему, используя пароль от ssh-ключа, и при этом чтобы ssh-agent запускался и больше пароль никогда не спрашивал. Все это можно сделать используя модуль pam_ssh для PAM (Pluggable Authentication Modules for Linux).

Настроить его очень просто: надо воткнуть в auth
auth    sufficient      pam_ssh.so
а в session, соответственно
session sufficient      pam_ssh.so

В PAM модули работают как и везде: динамически загружается .so-файл, и запускаются у него функции с наперед известными именами, куда передаются разные параметры, с которыми модуль знает что делать. Первая строчка, таким образом, ответственна за проверку пароля к ssh-ключу, вторая строчка — запуск правильного процесса ssh-agent.

Запуская ssh-agent, pam_ssh.so делает в ~/.ssh файл с именем в духе agent-$HOSTNAME и содержанием вида:
SSH_AUTH_SOCK=/tmp/ssh-qjtjCQkp2852/agent.2852; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2853; export SSH_AGENT_PID;
echo Agent pid 2853;

Вообще говоря, после этого можно в .profile или .bashrc просто выполнить этот файл как кусок скрипта. После этого нужные переменные среды окружения будут иметь нужные значения и ssh правильно подцепит свой агент. Однако, в PAM предусмотрен модуль pam_env ответственный за установку переменных среды окружения. Автоматом почему-то ничего не заработало, но заработало после добавления в /etc/security/pam_env.conf строчек:
SSH_AUTH_SOCK DEFAULT="" OVERRIDE=@{SSH_AUTH_SOCK}
SSH_AGENT_PID DEFAULT="" OVERRIDE=@{SSH_AGENT_PID}

Комментариев нет: