emacs tramp работает с gnome-keyring-daemon

641
jarvisschultz

Прямо сейчас я gnome-keyring-daemonнастроен начать при входе в систему. Если я запускаю, emacs -qа затем открываю файл на сервере, используя, M-x find-fileа затем ввожу файл на удаленном сервере, например /ssh:user@server:/home/user/.bashrc, то появляется GUI и запрашивает пароль моего личного ключа ssh. Я ввожу правильный пароль, и файл открывается идеально.

Однако, если gnome-keyring-daemonсрок действия пароля истекает из набора ключей, emacsвсе равно разрешается подключение к файлу без ввода пароля. Например, допустим, я открываю удаленный файл, а затем убиваю его с помощью C-x k. Затем я иду в терминал и введите ssh-add -D. Я могу убедиться, что это заставит связку ключей забыть пароль, запустив ssh localhost(GUI выскакивает и запрашивает пароль.) Но если я пытаюсь повторно открыть удаленный файл в emacs, используя C-x C-f M-p RETфайл, файл открывается без пароля.

Запуск tramp-cleanup-all-connectionsустраняет эту проблему, т. Е. Агент правильно запросит пароль, если ключ отсутствует в связке ключей. Установка tramp-persistency-file-nameна nil, кажется, не меняет поведение.

Какой эффективный способ решить эту проблему? Я бегу tramp-cleanup-all-connectionsна крючке? Может по таймеру? Влияет ли использование этой функции на будущие соединения бродяги?

  • emacs-версия: GNU Emacs 24.3.1
  • бродяга-версия: 2.2.6-24.3
  • gnome-keyring-daemon --version: 3.2.2

РЕДАКТИРОВАТЬ

Я сейчас на другом компьютере с новыми версиями соответствующих пакетов, но я все еще вижу то же самое поведение.

  • emacs-версия: GNU Emacs 24.4.2
  • бродяга-версия: 2.2.9-24.4
  • gnome-keyring-daemon --version: 3.10.1

Я просто выполнил следующие шаги:

  1. Откройте Emacs с emacs -Q
  2. Эвал (require 'tramp)и(setq tramp-verbose 10)
  3. Открыть файл на удаленном сервере с помощью tramp; Графический интерфейс gnome-keyring-daemon запросил пароль SSH-ключа.
  4. Убил удаленный файл используя C-x k
  5. В терминале я запустил ssh-add -Dи проверил, что пароль больше не кешируется.
  6. Повторно открыл удаленный файл, используя C-x C-f M-p RET
  7. Бродяга открыл файл, не спрашивая пароль.

Копия отладочного буфера tramp находится в этой папке .

0

1 ответ на вопрос

0
Michael Albinus

Tramp caches used passwords. You could disable this by setq password-cache nil)

Хотя документация для `password-cache` определенно предполагает, что это решит мою проблему, установка его в` nil` не влияет на поведение. Фактически, даже если для `password-cache` установлено значение` nil`, tramp все равно будет кэшировать пароли, которые даже не связаны с `gnome-keyring-daemon`. Например, используя tramp для открытия локальных файлов с помощью `sudo`, пароль sudo, похоже, кэшируется до тех пор, пока я не очистлю соединение явно (даже с нулевым` password-cache`). Возможно, это ошибка? jarvisschultz 9 лет назад 0
Хм, есть также `password-cache-expiry`, который вы можете попытаться установить в` t`. Michael Albinus 9 лет назад 0
Согласно документу этой переменной, это количество секунд, в течение которых пароли должны быть кэшированы. Установка в `nil` отключает истечение срока действия. Мой глобально установлен на 16. Emacs не позволит установить его в `t`. jarvisschultz 9 лет назад 0
Ой да. `password-cache-expiry` не место для редактирования. Другим источником кэшированного пароля может быть auth-source.el, который всегда включен по умолчанию в Tramp. Трудно сказать, входит ли он в игру, не отлаживая Tramp. Вы можете установить для `tramp-verbose` значение 10 и повторно запустить свои тесты с помощью` emacs -Q`. Я мог бы попытаться проверить следы. Не волнуйтесь, Бродяга ** НЕ ** не напишет строку пароля в следы. Michael Albinus 9 лет назад 0
Я только что отредактировал свой вопрос со ссылкой на журналы отладки бродяги. jarvisschultz 9 лет назад 0
Я проверил следы. Существует только одно соединение с удаленным хостом, задокументированное в 12: 12: 11.291237. Там не было запроса пароля; скорее всего, потому что вся обработка пароля была сделана через ssh-agent. Бродяга не участвовал в отправке пароля. Когда вы деактивируете ssh-agent, как описано, соединение Tramp все еще активно. Поскольку нет ** нового ** соединения Tramp, также нет запроса пароля, и поэтому удаленный файл открывается. Выглядит для меня как ожидаемое поведение. Michael Albinus 9 лет назад 0

Похожие вопросы