¿Cómo dejar que eshell recuerde la contraseña de sudo durante dos minutos?

15

En términos generales bash, cuando ejecuto un sudo ...comando, bash recordará mi contraseña por un tiempo. Esto facilita la tarea de administración de paquetes.

Por ejemplo:

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

¿Es posible lograrlo en eshall?

(Sé termo ansi-termen Emacs puedo hacer esto. Pero ESHELL integrar mejor con Emacs.)

Mella
fuente

Respuestas:

14

En primer lugar, compruebe qué sudo se ejecuta en su sesión de eshell. Puede ser el sudo de su sistema:

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

o el sudo de 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'

El sudo de Eshell usa el método su o sudo de TRAMP. Estos comandos están en el módulo eshell-tramp, que está deshabilitado de manera predeterminada.

Cubriré el caso sudo de eshell, porque es interno de Emacs y no depende de la distribución de su sistema operativo:

  1. Cargue el módulo eshell-tramp:

    (require 'em-tramp) ; to load eshell’s sudo
    
  2. Cambiar al sudo de eshell

    • prefiriendo comandos integrados

      (setq eshell-prefer-lisp-functions t)
      

      Parece que en Emacs 24.4 necesitamos establecer

      (setq eshell-prefer-lisp-variables t)
      
    • mediante la creación de un alias (ejecutar fragmento en eshell)

      alias sudo 'eshell/sudo $*'
      

      Los alias definidos (o eliminados) por el comando alias se escriben automáticamente en el archivo nombrado por eshell-aliases-file , que también puede editar directamente (aunque tendrá que volver a cargarlo manualmente).

  3. Finalmente habilite el almacenamiento en caché de contraseñas para el sudo de eshell (y TRAMP):

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

PD Si ha cambiado su solicitud con eshell-prompt-function , recuerde ajustar la solicitud regex eshell-prompt-regexp en consecuencia. La expresión regular incorrecta puede romper algunas funciones de eshell, incluida la detección de contraseña.

kmicu
fuente
Después de seguir estas instrucciones, which sudotodavía se muestra /usr/bin/sudoen mi sistema.
Boccaperta-IT
¿Lo probaste con un nuevo búfer de eshell? La sesión de eshell actual del IIRC no recogerá los cambios.
kmicu
Si. Reinicié emacs daemon y abrí un nuevo cliente.
Boccaperta-IT
Después de una prueba superficial, veo que (setq eshell-prefer-lisp- variables t) se requiere en emacs 24.4. @ Boccaperta-IT, ¿puede confirmar si funciona para usted?
kmicu
Todavía no funciona /usr/bin/sudo(estoy usando Emacs 25.0.50.1, sin embargo)
Boccaperta-IT
4

Para obtener sudo trabajar en Emacs 26 (probablemente el mismo para Emacs 25) sin hacer un alias he tenido que añadir eshell-trampa eshell-modules-list.

(add-to-list 'eshell-modules-list 'eshell-tramp)
Emmatipate
fuente
también es necesario(require 'esh-module)
nymo