Jak pozwolić eshellowi zapamiętać hasło sudo przez dwie minuty?

15

W ogólnym ujęciu bashuruchomionym, kiedy uruchomię sudo ...polecenie, bash zapamięta przez chwilę moje hasło. Ułatwia to zarządzanie pakietami.

Na przykład:

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

Czy można to osiągnąć w eshall?

(Wiem, termczy ansi-termw Emacs może to zrobić. Ale eshell lepiej zintegrować z Emacs).

Nacięcie
źródło

Odpowiedzi:

14

Przede wszystkim sprawdź, które sudo jest wykonywane w sesji eshell. Może to być sudo twojego systemu:

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

lub sudo eshell:

$ 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 za sudo wykorzystuje su lub sudo metodę Tramp jest. Te polecenia znajdują się w module eshell-tramp, który jest domyślnie wyłączony.

Omówię sprawę sudo eshell, ponieważ jest ona wewnętrzna dla Emacsa i nie zależy od dystrybucji systemu operacyjnego:

  1. Załaduj moduł eshell-tramp:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. Przejdź do sudo eshell

    • preferując wbudowane polecenia

      (setq eshell-prefer-lisp-functions t)
      

      Wygląda na to, że w Emacsie 24.4 musimy ustawić

      (setq eshell-prefer-lisp-variables t)
      
    • przez utworzenie aliasu (wykonaj fragment w eshell)

      alias sudo 'eshell/sudo $*'
      

      Aliasy zdefiniowane (lub usunięte) przez polecenie aliasu są automatycznie zapisywane do pliku o nazwie eshell-aliases-file , który można również edytować bezpośrednio (chociaż trzeba będzie go ręcznie załadować ponownie).

  3. Na koniec włącz buforowanie haseł dla sudo eshell (i TRAMP):

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

PS Jeśli zmieniłeś swój monit za pomocą funkcji eshell-prompt- , pamiętaj o odpowiednim dostosowaniu wyrażenia regularnego eshell-prompt-regexp . Błędne wyrażenie regularne może uszkodzić niektóre funkcje eshell - w tym wykrywanie hasła.

kmicu
źródło
Po wykonaniu tych instrukcji which sudonadal wyświetla się /usr/bin/sudow moim systemie.
Boccaperta-IT,
Czy przetestowałeś go przy użyciu świeżego bufora eshell? Bieżąca sesja eshell IIRC nie odbierze zmian.
kmicu
Tak. Zrestartowałem demona emacs i otworzyłem nowego klienta.
Boccaperta-IT,
Po płytkich testach widzę, że (setq eshell-prefer-lisp- zmienne t) jest wymagany w emacsie 24.4. @ Boccaperta-IT czy możesz potwierdzić, czy to działa dla Ciebie?
kmicu
Wciąż nie działa /usr/bin/sudo(używam Emacsa 25.0.50.1)
Boccaperta-IT,
4

Aby uzyskać sudo pracuje w Emacs 26 (chyba sam za Emacs 25) bez dokonywania alias musiałem dodać eshell-trampdo eshell-modules-list.

(add-to-list 'eshell-modules-list 'eshell-tramp)
Emmatipate
źródło
też muszę(require 'esh-module)
nymo