Comment laisser eshell se souvenir du mot de passe sudo pendant deux minutes?

15

D'une manière générale bash, lorsque j'exécute une sudo ...commande, bash se souviendra de mon mot de passe pendant un certain temps. Cela facilite la tâche de gestion des packages.

Par exemple:

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

Est-il possible de l'accomplir en eshall?

(Je sais termou ansi-termEmacs peut le faire. Mais eshell s'intègre mieux avec Emacs.)

pseudo
la source

Réponses:

14

Tout d'abord, vérifiez quel sudo est exécuté dans votre session eshell. Il peut s'agir du sudo de votre système:

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

ou le sudo d'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'

Le sudo d'Eshell utilise la méthode su ou sudo de TRAMP. Ces commandes se trouvent dans le module eshell-tramp, qui est désactivé par défaut.

Je couvrirai le cas sudo d'Eshell, car il est interne à Emacs et ne dépend pas de votre distribution OS:

  1. Charger le module eshell-tramp:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. Passer au sudo d'Eshell

    • en préférant les commandes intégrées

      (setq eshell-prefer-lisp-functions t)
      

      Il semble que dans Emacs 24.4, nous devons définir

      (setq eshell-prefer-lisp-variables t)
      
    • en créant un alias (exécutez l'extrait dans eshell)

      alias sudo 'eshell/sudo $*'
      

      Les alias définis (ou supprimés) par la commande alias sont automatiquement écrits dans le fichier nommé par eshell-aliases-file , que vous pouvez également modifier directement (bien que vous deviez le recharger manuellement).

  3. Enfin, activez la mise en cache des mots de passe pour le sudo d'Eshell (et TRAMP):

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

PS Si vous avez modifié votre invite avec eshell-prompt-function , n'oubliez pas d'ajuster l'invite regex eshell-prompt-regexp en conséquence. Une regex d'invite incorrecte peut casser certaines fonctionnalités d'Eshell - y compris la détection de mot de passe.

kmicu
la source
Après avoir suivi ces instructions, which sudos'affiche toujours /usr/bin/sudosur mon système.
Boccaperta-IT
L'avez-vous testé avec un nouveau tampon eshell? La session eshell actuelle de l'IIRC ne prendra pas en compte les modifications.
kmicu
Oui. J'ai redémarré le démon emacs et ouvert un nouveau client.
Boccaperta-IT
Après des tests superficiels, je constate que (setq eshell-prefer-lisp- variables t) est requis dans emacs 24.4. @ Boccaperta-IT pouvez-vous confirmer si cela fonctionne pour vous?
kmicu
Ne fonctionne toujours pas /usr/bin/sudo(j'utilise Emacs 25.0.50.1, cependant)
Boccaperta-IT
4

Pour obtenir sudo travailler dans Emacs 26 (probablement la même chose pour Emacs 25) sans faire un alias que je devais ajouter eshell-trampà eshell-modules-list.

(add-to-list 'eshell-modules-list 'eshell-tramp)
Emmatipate
la source
ont également besoin de(require 'esh-module)
nymo