¿Cómo evitar que Emacs muestre la frase de contraseña en `Mx shell`?

9

Intenté usar ático con una frase de contraseña para hacer una copia de seguridad de mis archivos desde adentro M-x shell. El shell expuso la frase de contraseña como texto sin formato en el búfer y la hizo disponible al escribir M-ry al revisar el historial de entrada del shell con C-c C-l.

Cuando cerré el shell y volví a abrir el historial de entrada, vi que al menos desapareció. Presumiblemente, porque el shell lee su historia inicial .bash_historyy al menos bashtuvo el buen sentido de no escribir mi passphraseallí.

¿Realmente necesito irme emacspara realizar mis atticcopias de seguridad, o hay alguna forma de configurarlo para que no sea descuidado?

Pude reproducir el problema con una nueva emacs -Qsesión. Estaba confundido antes porque Emacs oculta correctamente la frase de contraseña en todos los casos excepto cuando llamo

 attic create --stats /path/to/backup::name ~/folders ~/backed ~/up

Luego atticaparece como:

Enter passphrase for /path/to/backup::name:

El problema se puede reproducir con esta línea única de Python:

python -c 'import getpass; getpass.getpass("Hello")'

Si la cadena de solicitud de contraseña es "Password:"Emacs ve una solicitud de contraseña, pero no si la cadena es otra cosa.

¿Cómo puedo hacer que Emacs reconozca al menos las solicitudes de contraseña del ático?

wdkrnls
fuente

Respuestas:

13

En el modo Shell, Emacs detecta las solicitudes de contraseña en función de la solicitud. Si ve Password:(o Enter new password:, o Passwort:, o Wachtwoord:una serie de variaciones), asume que se le solicita que ingrese una contraseña y lee una cadena del minibúfer (repitiendo la solicitud); esta cadena no se repite y no se ingresa en ninguna lista de historial.

Si Emacs no reconoce una solicitud, puede lograr el mismo efecto llamando M-x send-invisible(no está vinculado a ninguna tecla de forma predeterminada).

Puede enseñar a Emacs a reconocer las solicitudes de contraseña que ve al personalizarlas comint-password-prompt-regexp. Tenga en cuenta que esta expresión regular se busca en la línea actual, por lo que debe comenzar ^si desea hacer coincidir el texto en el margen izquierdo, y debe terminar \'si no desea permitir texto arbitrario después.

Para agregar otro formato de solicitud, agregue \|^…\'al final de la expresión regular existente. Por ejemplo, podría agregar esto a su archivo de inicio (recuerde duplicar las barras invertidas entre comillas dobles):

(setq comint-password-prompt-regexp
      (concat comint-password-prompt-regexp
              "\\|^Enter passphrase for .*:\\s *\\'"))
Gilles 'SO- deja de ser malvado'
fuente
1
Y si agrega algún elemento comint-password-prompt-regexp, considere enviarlo M-x report-emacs-bugpara que pueda agregarse a los valores predeterminados.
Stefan