su - автоматическая разблокировка ключа ssh
В Linux существует инструмент - я полагаю, что это ssh-agent - который может автоматически разблокировать ключ ssh, так что при использовании git для извлечения из удаленного репозитория он автоматически использует разблокированный закрытый ключ и не нужно вводить пароль.
Сейчас пользуюсь su
переключиться на другого пользователя, и когда я делаю git pull
из этого su
сеанс, он спрашивает меня пароль моего личного ключа каждый раз. Я хотел бы знать, есть ли способ, которым я могу автоматически разблокировать закрытый ключ, когда я перешел на другого пользователя с su
команда.
Так что поменяйте на пользователя, которого я обычно использую su otheruser
и введите пароль этого пользователя.
Обновление: я наконец получил это, чтобы работать. Вот еще немного информации, предположим, что Алиса - это пользователь, которого я использовал для входа в графическую сессию, а Боб - это пользователь, которого я su
в. -m
опция для су не нужна.
alice@earth $ps aux|grep ssh-agent
# added backlash to emphasize line break
alice 29878 0.0 0.0 10616 316 ? Ss 15:49 0:00 \
/usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session \
/usr/bin/im-launch \
/usr/local/bin/my-session
alice@earth $echo $SSH_AUTH_SOCK
/tmp/ssh-nFneWW1biI9Q/agent.29796
alice@earth $echo $SSH_AGENT_PID
29878
Теперь я в боб
alice@earth $su bob
Password:
bob@earth $echo $SSH_AGENT_PID
29878
bob@earth $echo $SSH_AUTH_SOCK
/tmp/ssh-nFneWW1biI9Q/agent.29796
bob@earth $eval $(ssh-agent)
SSH_AUTH_SOCK=/tmp/ssh-unCratTnFl4M/agent.6144; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6145; export SSH_AGENT_PID;
echo Agent pid 6145;
bob@earth $echo $SSH_AGENT_PID
6145
bob@earth $echo $SSH_AUTH_SOCK
/tmp/ssh-unCratTnFl4M/agent.6144
Наконец звоню ssh-add
:
bob@earth $ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/bob/.ssh/id_rsa:
Identity added: /home/bob/.ssh/id_rsa (/home/bob/.ssh/id_rsa)
После этого, когда я бегу git pull
Мне больше не нужно вводить пароль.
1 ответ
Немного теории
ssh-agent
доступ через сокет, который хранится в переменной окружения под названием SSH_AUTH_SOCK
, Это, вероятно, прошло, если вы используете su
(по соображениям безопасности). Вы можете предотвратить это поведение, используя -m
переключаться как справочные страницы для su(1)
предлагает:
-m, -p, --preserve-environment
Preserve the current environment, except for:
Но (также по соображениям безопасности) этот сокет доступен только для пользователя, который его создал:
$ ll $SSH_AUTH_SOCK
srwxrwxr-x 1 jakuje jakuje 0 Sep 2 21:23 /run/user/1000/keyring/ssh
Если у вас есть какая-то безопасная группа, с которой вы хотите поделиться этим сокетом, вы можете настроить ACL для этого сокета, но я не рекомендую вам делать его доступным для записи всем пользователям!
К вопросу
После su
вы смените пользователя и у вас больше не будет доступа к оригинальному сокету. Вам нужно будет запустить новый ssh-agent
и добавьте ключи к нему (и разблокируйте их вручную):
eval `ssh-agent`
ssh-add path/to/your_key
Другая возможность заключается в использовании gnome-keyring-daemon
, который делает в основном то же самое, но может скрыть это за каким-то мастер-паролем (обычно логин-пароль). Но в вопросе не говорится об используемом инструменте, поэтому я могу только догадываться, что такое намерение.