Магіт, як використовувати ssh агент системи та не запитувати пароль


19

Я переглянув Google і прочитав FAQ та Wiki для Magit, але все ще не можу це зрозуміти, я все знаходжу відповіді про Windows ...

Як я можу налаштувати Magit використовувати свій запущений сеанс SSH-агента і не запитувати пароль під час натискання.

Я запускаю Linux і маю запуск ssh-агента разом із моїм терміналом і розблоковую свій ключ, що дозволяє мені робити git push тощо, не вводячи мене щоразу вводити пароль.

Env:
Arch Linux
Emacs 24.4

ssh-агент із доданими ключами, щоб розблокувати перший відкритий термінал.

EDIT: Я мав на увазі використання парольної фрази, ви знаєте ключ ssh та ін.
І я наполягаю на Bitbucket, але я вважаю, що ключовою проблемою є те, що Magit не говорить / розпізнає мого ssh-агента.
Можливо, є якийсь конфігуратор, який потрібно встановити, щоб сказати, що я його запускаю ??


Насправді прийшов з тим же питанням.
emacsomancer

Що таке віддалений URL? http: // або git: //?
Nsukami _

git@bitbucket.org у цьому випадку налаштуйте так: url = git@bitbucket.org:
Андрес

Чи можете ви сказати нам, що 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

Ну, це виявилося більше кролячої нори, ніж я, хоча ... І для того, що я можу зібрати, немає кращого рішення для цього конкретного питання, з цим поєднанням робочого столу, ssh-агента, emacs.

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

Рішення 1
Виконайте цю команду, щоб відключити запуску ssh-агента від виконання

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-агент, який ми почали.

Рішення 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 _ **, які вказали мені на правильний напрямок.


З якоїсь конкретної причини ви не задоволені агентом XFCE і хочете запустити свій власний? Відмова, здавалося б, більш просте рішення.
тріплей

Я не завжди запускаю XFCE, і мені не байдуже, як керує ним робочий стіл, я віддаю перевагу плагіну, який обробляє його з oh-my-zsh. Тож мені простіше пропустити випадок використання за замовчуванням. (надано, я майже не знаю про агента ... але це не те, що я дійсно хочу витратити час на роздуми)
Андрес

Можливо, Zsh повинен розпізнати випадок, коли агент вже працює, і замість цього відкласти його; але очевидно, це тут стає поза темою.
трійка

1
Можливо, агенцію ssh слід розширити і для роботи на unix-подібних системах.
nпостаs

7

Ще одне рішення для ледачих - просто використовувати пакет, який обробляє саме цей випадок (встановлення змінних середовища Emacs ', пов'язаних з брелоком):

  1. Установка і додати в свій init.el пакет брелка-середовищі .
  2. Біжіть M-x keychain-refresh-environmentі тепер це має працювати.
  3. Розмістіть (keychain-refresh-environment)у своєму init.el, щоб рішення працювало після перезавантаження Emacs

І це все, якщо припустити, що ваш ssh-агент налаштований і працює.

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

Keychain - це сценарій, який управляє ssh-агентом та gpg-агентом. Зазвичай він запускається з файлу ініціалізації оболонки. Це дозволяє вашим завданням оболонок і cron ділитися одним ssh-агентом та / або gpg-агентом.

Коли брелок запускається, він перевіряє запущений агент, інакше він запускає їх. Це зберігає змінні середовища агентів у файли всередині ~ / .keychain /, щоб наступні оболонки могли джерелом цих файлів.

Коли Emacs запускається під X11, а не безпосередньо з терміналу, ці змінні не встановлюються. Ця бібліотека шукає ці файли, створені брелоком, а потім встановлює відповідно змінні середовища Emacs. Він насправді не запускає брелок, тому вам все одно доведеться спочатку запустити його з оболонки входу.

Для використання запустіть функцію `keychain-refresh-environment 'у вашому файлі init. Якщо брелок ще не запущений під час запуску Emacs, ви також можете пізніше викликати цю функцію інтерактивно.

Також дивіться: http://www.funtoo.org/wiki/Keychain


1
Це саме те, що мені було потрібно, оскільки я вже використовую keychain.
xji

1

FWIW, keychainтепер має --systemdкомутатор, який вводить змінні в системне середовище користувача.

Найпростішим рішенням, який я знайшов, було додати eval "$(keychain --eval --quiet --noask --systemd keys...)"до сценарію, запущеного з системного блоку, щоб запустити сервер Emacs.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.