Como impedir que o Emacs mostre a senha no `Mx shell`?

9

Tentei usar o sótão com uma senha para fazer backup de meus arquivos por dentro M-x shell. O shell expôs a senha como texto sem formatação no buffer e a disponibilizou digitando M-re examinando o histórico de entrada do shell C-c C-l.

Quando fechei o shell e reabri o histórico de entrada, vi que pelo menos ele desapareceu. Presumivelmente, porque o shell lê sua história inicial .bash_historye pelo menos bashteve o bom senso de não escrever o meu passphraselá.

Eu realmente preciso sair emacspara executar meus atticbackups ou existe uma maneira de configurá-lo para não ser descuidado?

Consegui reproduzir o problema com uma nova emacs -Qsessão. Eu estava confuso antes porque o Emacs oculta corretamente a senha em todos os casos, exceto quando eu ligo

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

Em seguida, atticsolicita como:

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

O problema pode ser reproduzido com este one-liner do Python:

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

Se a sequência de solicitação de senha for "Password:", o Emacs verá um prompt de senha, mas não se a sequência for outra coisa.

Como posso fazer o Emacs reconhecer pelo menos as solicitações de senha do sótão?

wdkrnls
fonte

Respostas:

13

No modo Shell, o Emacs detecta solicitações de senha com base no prompt. Se vir Password:(ou Enter new password:, ou Passwort:ou Wachtwoord:ou várias variações), presume-se que você seja solicitado a digitar uma senha e leia uma string do minibuffer (repetindo o prompt); essa sequência não é repetida e não é inserida em nenhuma lista do histórico.

Se o Emacs não reconhecer um prompt, você poderá obter o mesmo efeito chamando M-x send-invisible(não vinculado a nenhuma tecla por padrão).

Você pode ensinar o Emacs a reconhecer as solicitações de senha que você vê personalizando comint-password-prompt-regexp. Observe que esse regexp é pesquisado na linha atual; portanto, deve começar com ^se você deseja corresponder o texto na margem esquerda e terminar com \'se não desejar permitir texto arbitrário posteriormente.

Para adicionar outro formato de prompt, adicione \|^…\'no final da regexp existente. Por exemplo, você pode adicionar isso ao seu arquivo init (lembre-se de fazer barras invertidas entre aspas duplas):

(setq comint-password-prompt-regexp
      (concat comint-password-prompt-regexp
              "\\|^Enter passphrase for .*:\\s *\\'"))
Gilles 'SO- parar de ser mau'
fonte
11
E se você adicionar algum elemento comint-password-prompt-regexp, considere enviá-lo via M-x report-emacs-bugpara que ele possa ser adicionado aos padrões.
Stefan