2

В Linux существует инструмент - я полагаю, что это ssh-agent - который может автоматически разблокировать ключ ssh, поэтому при использовании git для извлечения из удаленного репозитория он автоматически использует разблокированный закрытый ключ, и вам не нужно вводить пароль.

Теперь я использую su для переключения на другого пользователя, и когда я выполняю git pull из этого сеанса su , он каждый раз запрашивает у меня пароль моего закрытого ключа. Я хотел бы знать, есть ли способ, которым я могу автоматически разблокировать закрытый ключ, когда я перешел на другого пользователя с помощью команды su .

Так что переходите на пользователя, которого я обычно использую su otheruser и вводите пароль этого пользователя.

Обновление: я наконец получил это, чтобы работать. Вот еще немного информации, предположим, что Алиса - это пользователь, которого я использовал для входа в графическую сессию, а Боб - это пользователь, с которым я su . Опция -m для su не нужна.

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 ответ1

4

Немного теории

Доступ к 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 , который делает то же самое, но может скрыть это за каким-то главным паролем (обычно паролем для входа). Но в вопросе не говорится об используемом инструменте, поэтому я могу только догадываться, что такое намерение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .