Як дозволити Eshell запам'ятати пароль sudo протягом двох хвилин?


15

У загальному розумінні bash, коли я запускаю sudo ...команду, bash запам'ятає мій пароль на деякий час. Це полегшує завдання управління пакетом.

Наприклад:

sudo apt-get update
# password ......
sudo apt-get install turing-brain
# execute without requiring password again.

Чи можна виконати це в Eshall?

(Я знаю, termабо ansi-termв Emacs це можна зробити. Але ешелл краще інтегрується з Emacs.)

Відповіді:


14

В першу чергу перевірки , яку Судо виконується у вашій eshell сесії. Це може бути судо вашої системи:

$ which sudo
/path/to/system/wide/sudo
$ which *sudo
/path/to/system/wide/sudo

або судо Ешелла:

$ which sudo
sudo is a compiled Lisp function in `em-tramp.el'
$ which eshell/sudo
eshell/sudo is a compiled Lisp function in `em-tramp.el'

Eshell в Судо використовує су або SUDO метод бродяга в. Ці команди знаходяться в модулі ешел-трамп, який за замовчуванням відключений.

Я розкрию випадок судового справи eshell, оскільки він внутрішній для Emacs і не залежить від вашого дистрибутива ОС:

  1. Завантажити модуль ешел-трамп:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. Переключитися на судо Ешелла

    • віддаючи перевагу вбудованим командам

      (setq eshell-prefer-lisp-functions t)
      

      Здається, що в Emacs 24.4 нам потрібно встановити

      (setq eshell-prefer-lisp-variables t)
      
    • створивши псевдонім (виконайте фрагмент в ешеллі)

      alias sudo 'eshell/sudo $*'
      

      Псевдоніми, визначені (або видалені) командою псевдонім, автоматично записуються у файл, названий eshell-aliases-файл , який ви також можете редагувати безпосередньо (хоча вам доведеться перезавантажувати його вручну).

  3. Нарешті увімкніть кешування паролем для судового коду (і TRAMP):

    (setq password-cache t) ; enable password caching
    (setq password-cache-expiry 3600) ; for one hour (time in secs)
    

PS Якщо ви змінили своє запит на функцію eshell-prompt , тоді не забудьте відповідним чином відрегулювати підказку regex eshell-prompt-regexp . Неправильний регулярний регулярний вираз може порушити деякі функції ешелла, включаючи виявлення пароля.


Після виконання цих інструкцій which sudoвсе ще відображається /usr/bin/sudoв моїй системі.
Boccaperta-IT

Ви протестували це із свіжим буфером ешелі? Поточна сесія IIRC в ешеллі не змінить зміни.
kmicu

Так. Я перезапустив демон emacs і відкрив нового клієнта.
Boccaperta-IT

Після дрібного тестування я бачу, що (setq eshell-предпочитаю-lisp- змінні t) потрібно в emacs 24.4. @ Boccaperta-IT Ви можете підтвердити, чи працює він для вас?
kmicu

Не працює, досі /usr/bin/sudo(я використовую Emacs 25.0.50.1, хоча)
Boccaperta-IT

4

Щоб отримати Sudo працює в Emacs 26 (ймовірно , те ж саме для Emacs 25) без псевдоніма , я повинен був додати eshell-trampдо eshell-modules-list.

(add-to-list 'eshell-modules-list 'eshell-tramp)

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