Magit, как использовать системный агент ssh и не спрашивать пароль

19

Я гуглил и прочитал FAQ и Wiki для Magit, но все еще не могу понять это, все, что я нахожу, это ответы о Windows ...

Как я могу настроить Magit для использования моего запущенного сеанса ssh-agent и не запрашивать пароль при выполнении push.

Я использую Linux и запускаю ssh-agent на своем терминале, а затем разблокирую ключ, что позволяет мне выполнять git push и т. Д., Не вводя пароль каждый раз.

Конверт:
Arch Linux
Emacs 24.4

ssh-agent с добавленными ключами для разблокировки на первом открытом терминале.

РЕДАКТИРОВАТЬ: я имел в виду использование пароля, вы знаете, для ключа SSH, и др.
И я подталкиваю к Bitbucket, но я верю, что ключевая проблема заключается в том, что Magit не говорит / не распознает мой ssh-agent.
Может быть, нужно установить какой-нибудь конфиг, чтобы сказать, что я его запускаю ??

Andres
источник
На самом деле пришли с тем же вопросом.
emacsomancer
Что такое удаленный URL? http: // или git: //?
Nsukami _
git@bitbucket.org в этом случае, настройте так: url = git@bitbucket.org:
Andres
Можете ли вы сказать нам, что Emacs возвращает, когда вы это делаете M-x getenv SSH_AGENT_PID? M-x getenv SSH_AUTH_SOCK
Nsukami _
SSH_AGENT_PID = 602 SSH_AUTH_SOCK = /tmp/ssh-13kI6AaYvgji/agent.601
Андрес

Ответы:

13

Что ж, оказалось, что это скорее кроличья нора, чем я ... И для того, что я могу собрать, нет лучшего решения для этой конкретной проблемы, с такой комбинацией desktop, ssh-agent, emacs.

Проблема 1
XFCE запускал свой собственный ssh-агент с сеансом, фактически нигде не говоря, что привело к тому, что в системе был 1 неиспользуемый глобальный ssh-agent и мой специфичный для оболочки агент, разблокированный.
На другом DE вы можете запустить с той же проблемой, и вам нужно будет найти особенности, чтобы отключить автоматический запуск агента.

Решение 1
Запустите эту команду, чтобы отключить запуск ssh-agent при запуске

xfconf-query -c xfce4-session -p /startup/ssh-agent/enabled -n -t bool -s false

Проблема 2
Теперь Emacs не имеет установленных переменных SSH_AGENT_PID и SSH_AUTH_SOCK , поэтому в загруженной среде ничего нет. Очевидно, что Magit по-прежнему запрашивает ключ, поскольку он не знает о новом ssh-agent, который мы начали.

Решение 2
Нам нужно, чтобы Emacs извлек эти новые переменные из среды, но, разумеется, прямого пути нет.
Введите: exec-path-from-shell, который позволяет вам извлекать переменные окружения из вашей оболочки. Так.

  1. Установите пакет exec-path-from-shell по своему усмотрению.
  2. Добавьте следующий код в ваш init.el, чтобы он загружался при запуске Emacs.

(require 'exec-path-from-shell) (exec-path-from-shell-copy-env "SSH_AGENT_PID") (exec-path-from-shell-copy-env "SSH_AUTH_SOCK")

Спасибо, ребята, за предложение взглянуть на переменные SSH _ **, которое указало мне правильное направление.

Andres
источник
По какой-то конкретной причине вы не удовлетворены агентом XFCE и хотите запустить свой собственный? Отказ от этого кажется более простым решением.
tripleee
Я не всегда запускаю XFCE, и меня не волнует, как рабочий стол управляет им, я предпочитаю плагин, который обрабатывает его из oh-my-zsh. Поэтому мне проще пропустить вариант использования по умолчанию. (конечно, я не знаю достаточно об агенте ... но я не хочу тратить время на размышления)
Андрес
Может быть, Zsh должен распознать случай, когда агент уже запущен, и вместо этого отложить это; но, очевидно, это становится не по теме здесь.
tripleee
1
Возможно, ssh-agency должно быть расширено и для работы на Unix-подобных системах.
npostavs
7

Другое решение для ленивых - просто использовать пакет, который обрабатывает именно этот случай (устанавливая переменные среды, связанные с цепочкой для ключей Emacs):

  1. Установка и добавить в свой init.el пакет брелка-среде .
  2. Беги M-x keychain-refresh-environmentи теперь должно работать.
  3. Поместите (keychain-refresh-environment)в свой init.el, чтобы решение работало после перезапуска Emacs.

И все, при условии, что ваш ssh-агент настроен и работает.

Действительно хорошее описание, из комментария пакета:

Keychain - это скрипт, который управляет ssh-agent и gpg-agent. Обычно он запускается из файла инициализации оболочки. Это позволяет вашим оболочкам и заданиям cron совместно использовать одного ssh-агента и / или gpg-агента.

Когда цепочка для ключей запускается, он проверяет наличие агента, в противном случае он запускает их. Он сохраняет переменные окружения агентов в файлы внутри ~ / .keychain /, чтобы последующие оболочки могли получать эти файлы.

Когда Emacs запускается под X11, а не напрямую из терминала, эти переменные не устанавливаются. Эта библиотека ищет эти файлы, созданные keychain, а затем соответственно устанавливает переменные окружения Emacs. На самом деле он не запускает связку ключей, поэтому вам все равно придется сначала запустить ее из оболочки входа в систему.

Чтобы использовать, запустите функцию `keychain-refresh-environment 'в вашем файле инициализации. Если связка ключей еще не запускалась при запуске Emacs, вы также можете позже вызвать эту функцию интерактивно.

Также смотрите: http://www.funtoo.org/wiki/Keychain

tlegutko
источник
1
Это именно то, что мне было нужно, так как я уже использую keychain.
xji
1

У FWIW keychainтеперь есть --systemdпереключатель, который будет вводить переменные в пользовательскую среду systemd.

Самое простое решение, которое я нашел, - добавить eval "$(keychain --eval --quiet --noask --systemd keys...)"скрипт, запускаемый из модуля systemd, для запуска сервера Emacs.

Владимир Пантелеев
источник