Wie kann ich eshell zwei Minuten lang an das sudo-Passwort erinnern lassen?

15

bashWenn ich einen sudo ...Befehl ausführe , wird sich bash in der Regel eine Weile an mein Passwort erinnern. Dies erleichtert die Paketverwaltung.

Beispielsweise:

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

Ist es möglich, dies in eshall zu erreichen?

(Ich weiß termoder ansi-termin Emacs kann das. Aber eshell integriert sich besser in Emacs.)

Nick
quelle

Antworten:

14

Überprüfen Sie zunächst, welches sudo in Ihrer eshell-Sitzung ausgeführt wird. Es kann das Sudo Ihres Systems sein:

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

oder eshell's 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 die sudo verwendet Tramps su oder sudo - Methode. Diese Befehle befinden sich im Modul eshell-tramp, das standardmäßig deaktiviert ist.

Ich werde den Sudo-Fall von eshell behandeln, da er in Emacs integriert ist und nicht von Ihrer Betriebssystemdistribution abhängt:

  1. Laden Sie das eshell-tramp Modul:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. Wechseln Sie zu eshell's sudo

    • durch Vorziehen von eingebauten Befehlen

      (setq eshell-prefer-lisp-functions t)
      

      Es scheint, dass wir in Emacs 24.4 einstellen müssen

      (setq eshell-prefer-lisp-variables t)
      
    • durch Erstellen eines Alias (Snippet in Eshell ausführen)

      alias sudo 'eshell/sudo $*'
      

      Durch den Befehl alias definierte (oder gelöschte) Aliase werden automatisch in die von eshell-aliases-file angegebene Datei geschrieben , die Sie auch direkt bearbeiten können (obwohl Sie sie manuell neu laden müssen).

  3. Aktivieren Sie abschließend die Kennwortzwischenspeicherung für eshell's sudo (und TRAMP):

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

PS Wenn Sie Ihre Eingabeaufforderung mit der Funktion " eshell-prompt-regex" geändert haben, müssen Sie die Eingabeaufforderung " eshell-prompt-regexp" entsprechend anpassen . Falsche reguläre Ausdrücke für Eingabeaufforderungen können einige Funktionen von eshell beeinträchtigen - einschließlich der Kennworterkennung.

kmicu
quelle
Nach dem Befolgen dieser Anweisungen wird which sudoweiterhin /usr/bin/sudoauf meinem System angezeigt .
Boccaperta-IT,
Hast du es mit einem frischen Muschelpuffer getestet? Die aktuelle Eshell-Sitzung des IIRC übernimmt keine Änderungen.
kmicu
Ja. Ich habe den Emacs-Daemon neu gestartet und einen neuen Client geöffnet.
Boccaperta-IT
Nach flacher Prüfung sehe ich, dass (setq eshell-prefer-lisp- variables t) in Emacs 24.4 erforderlich ist. @ Boccaperta-IT kannst du bestätigen, ob es bei dir funktioniert?
kmicu
Funktioniert immer noch nicht /usr/bin/sudo(ich verwende jedoch Emacs 25.0.50.1)
Boccaperta-IT
4

Um sudo arbeiten in Emacs 26 (wahrscheinlich das gleiche für Emacs 25) ohne einen Alias machen musste ich hinzufügen eshell-trampzu eshell-modules-list.

(add-to-list 'eshell-modules-list 'eshell-tramp)
Emmatipate
quelle
müssen auch(require 'esh-module)
Nymo