Как я могу решить эту проблему ssh-agent?

17

Я использую Linux Mint и, похоже, не смог автоматически разблокировать gnome-keyring при входе в систему.

Симптом моей проблемы заключается в следующем:

$ ssh-add
Identity added: /home/me/.ssh/id_rsa (/home/me/.ssh/id_rsa)

$ git pull
WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-Nmf3J3/pkcs11: No such file or directory

Как я могу сделать так, чтобы git мог толкать / тянуть без ввода пароля?

Я понимаю, что здесь есть несколько вещей с gnome-keyring и ssh-agent, но я не смог их зафиксировать.

Запуск ssh-addво время сеанса означает, что меня больше не спрашивают мою фразу-пароль для SSH / git.

Проблема в том, что мне нужно было бы запускать ssh-addво время каждого сеанса - я, должно быть, упускаю, как разблокировать связку ключей Gnome при входе в систему.

$ export | grep GNOME          
GNOME_KEYRING_CONTROL=/tmp/keyring-hjMM4V
GNOME_KEYRING_PID=1961

Это случилось снова во время той же сессии, что и первое редактирование. Я сделал git pullи получил WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-hjMM4V/pkcs11: No such file or directory.

$ env | grep SSH
SSH_AGENT_PID=2116
SSH_AUTH_SOCK=/tmp/ssh-OACxJMBY2038/agent.2038

$ ps -fp $SSH_AGENT_PID
UID        PID  PPID  C STIME TTY          TIME CMD
eoin      2116  2038  0 09:47 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-session-manager
eoinoc
источник
1
Можете ли вы запустить export | grep GNOMEи опубликовать результаты. Вы видели эту ошибку?
Дидстер
Похоже на соответствующую ошибку. Так как я не всегда вижу предупреждение, я не уверен, что у меня есть более простая проблема, просто получая gnome-keyringавтоматическую разблокировку при входе в систему.
Eoinoc
возможно, у вас работает другой агент, кроме gnome-keyring. Как насчет env | grep SSHиps -fp $SSH_AGENT_PID
Стефан Chazelas
@ StephaneChazelas Я добавил, что вы предложили, спасибо. Да, я сделал жизнь сложной zshи tmuxработает (просто упомянуть об этом).
Eoinoc

Ответы:

2

Что должно произойти, это:

Вы запускаете сеанс gnome, часть которого запускается демон gnome-keyring (который также действует как агент ssh), и среда всего, что было запущено во время этого сеанса gnome, обновляется информацией о том, как связаться с этим агентом ssh. Пароль, который вы выдаете при графическом входе в систему, используется для разблокировки набора ключей по умолчанию.

Когда вы используете gnome-keyring в качестве ssh-agent, вы не хотите использовать другой агент вроде ssh-agent.

Когда ваша X-сессия завершается, gnome-keyring также прерывается. Но ваша сессия tmux остается. Тогда, даже если вы запустите другой gnome-keyring или ssh-agent, среда уже запущенных процессов tmuxне сможет с ним общаться, если вы не обновите их среду путем указания нового сокета.

Что вы могли бы сделать, это:

gnome-keyring-daemon -r > ~/.gkr

И . ~/.gkrво всех оболочках вы хотите использовать новый gnome-keyring

Остерегайтесь, однако, с каким DISPLAY будет соединяться gnome-keyring-daemon.

Стефан Шазелас
источник
Вы хотите сказать, что это происходит только тогда, когда мой сеанс X завершается, другими словами, когда я выхожу и снова захожу? У меня нет .gkr, я должен? Как я могу остерегаться того, к какому дисплею gnome-keyring-daemonон будет подключаться?
eoinoc
2

Первое, что я бы попробовал, это apt-get install ssh-askpass-gnomeиначе, если у вас не установлен этот пакет (или какая-либо альтернативная программа askpass), тогда gnome не сможет запросить у вас пароль, когда вам нужно будет разблокировать ключ.

Вам также необходимо DISPLAYправильно установить переменную:

$ echo $DISPLAY
:0.0

Кроме того, как вы начинаете свой терминал? Может быть проблема с тем, как вы запускаете терминальную сессию, и наследует ли он от него gnome-session. Это может произойти, когда вы используете какую-то программу gnon-gnome для установки привязок клавиш.

Предполагая, что вы используете, gnome-terminalвы можете проверить с помощью pstree. Здесь вы можете увидеть правильное наследование:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───xmonad-x86_64-l(27139)───gnome-terminal(26036)─┬─bash(26041)
                                                                                                                 ├─gnome-pty-helpe(+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 ├─{gnome-terminal}+
                                                                                                                 └─{gnome-terminal}+

Принимая во внимание, что в этом сеансе это НЕ наследуется от gnome-session:

$ pgrep gnome-terminal | xargs -l1 pstree -s 
init(1)───sh(25919)───gnome-terminal(25920)─┬─bash(25927)
                                            ├─gnome-pty-helpe(25926)
                                            ├─{gnome-terminal}(25921)
                                            ├─{gnome-terminal}(25924)
                                            └─{gnome-terminal}(25928)

Также проверьте, ssh-agentчто запускается gnome-session:

$ pgrep ssh-agent | xargs -l1 pstree -s
init(1)───lightdm(1643)───lightdm(26912)───gnome-session(27049)───ssh-agent(27091)
aculich
источник
Это немного сложно о том, какой терминал я использую (моя собственная вина!). Моя команда запуска терминала mate-terminal --maximize -e tmux(я полагаю, это gnome-терминал). Кроме того, zshзатем загружается в tmux. ssh-askpass-gnomeбыл установлен. $DISPLAYожидаемый результат. Для наследства, tmuxсидит mate-terminalбез особого надзора gnome-session. На отдельной ветке это tmux───zsh───xargs───pstree. Чтобы ответить на ваш последний вопрос, выход: init───mdm───mdm───x-session-manag───ssh-agent. Как вы думаете? Благодарю.
eoinoc
если предположить, что вы используете gnome (и я думаю, что Mint использует по умолчанию, так что, если вы не изменили его со значения по умолчанию?), то я думаю, что отсутствие mate-terminalнаследования от вас gnome-session- проблема. два вопроса: 1) что является результатом pgrep -fl gnome-sessionи; 2) какие действия вы предпринимаете, чтобы фактически вызвать свой терминал? из меню? с привязки горячей клавиши? или ????
aculich
Да, я на Гноме. 1) Выход пуст. 2) Очень интересно. Я обычно делаю Ctrl+Alt+t. Это ярлык, который я установил с помощью приложения Linux Mint Keyboard Shortcutsс помощью команды, которую я упоминал ранее. Однако при запуске Terminalчерез главное меню «Пуск» SSH действовал иначе . Графический интерфейс Gnome запросил у меня пароль к моей связке ключей. Возможность сохранить эту фразу-пароль для последующих сеансов была недоступна, я не мог ее выбрать. (Команда запуска меню также mate-terminal --maximize -e tmux.) Это приближает нас? Спасибо, aculich.
Eoinoc
Если вы видите странное поведение, Ctrl+Alt+tкоторое вы установили в сочетаниях клавиш, тогда, я думаю, вы, вероятно, испытываете ошибку в mdm / MATE. Какую версию Mint вы используете?
aculich
Я одна версия позади, на Linux Mint 13. Но для терминала с доступом к меню, почему он все еще не позволяет мне выбирать «сохранять эту фразу-пароль при каждом входе в систему»?
Eoinoc
1

Я думаю, что проблема постоянного хранения защищенного паролем ключа SSH.

Пожалуйста, посмотрите на следующие ресурсы:

Md Mahbubur Rahman
источник
Я буду комментировать, как я иду. С первой ссылкой я добавил `IdentityFile ~ / .ssh / id_rsa`, ~/.ssh/configно это не помогло .
eoinoc
Третья ссылка показывает базовую настройку, которая, кажется, не идет дальше того, что я уже сделал. Спасибо хоть.
eoinoc
-1

Добавьте это к вашему .bash_profile

if [ -n "$SSH_AUTH_SOCK" \
    -a "${SSH_AUTH_SOCK::13}" = "/tmp/keyring-" \
    -a ! -L "$SSH_AUTH_SOCK" ]
then
    OLD_AUTH_SOCK="$SSH_AUTH_SOCK"
    eval `ssh-agent`
    mv "$OLD_AUTH_SOCK" "$OLD_AUTH_SOCK"~
    ln -sfn "$SSH_AUTH_SOCK" "$OLD_AUTH_SOCK"
    SSH_AUTH_SOCK="$OLD_AUTH_SOCK"
fi
Марк Коэн
источник
Спасибо Марк. При этом $SSH_AUTH_SOCKимеет значение /tmp/ssh-QCndYkdq2025/agent.2025. Я что-то пропустил? $git pullвсе еще вызывает приглашение SSH passphrase.
eoinoc
Проверьте свои права доступа к файлу .ssh / authorized_keys на сервере. Это должно быть 0600.
Марк Коэн
На сервере? GitHub - это внешний сервер, и мой SSH-ключ там записан. Разве это не локальная проблема, нет?
eoinoc
Извините, не понял, что вы используете github. Да, у вас нет контроля над этим хозяином. Вы можете добавить несколько ключей к вашему ssh-agent и поэкспериментировать с sshing на localhost, чтобы убедиться, что вы можете выполнить аутентификацию правильно. Также вы можете попробовать ssh -vvv user @ host и посмотреть, что ломается.
Марк Коэн
Большинство настольных Linux-систем (включая Mint) обрабатывают ssh-agentдолжным образом при входе в систему сразу после установки, и обычно такие вещи, как эта, сводят на нет. Если по какой-то причине ваша система не справляется ssh-agent, не делайте этого вручную. Вместо этого используйте связку ключей, которая хорошо разработана для решения этой и связанных с ней проблем. Это также работает для BSD (Mac) и других не-Linux систем.
aculich