Execute ssh-add no Emacs e digite uma senha

9

Eu quero chamar o ssh-addcomando shell. Então eu chamo M-x shell-command RET, e no minibuffer, eu digito:ssh-add .ssh/id_rsa

A única coisa que recebo é:

ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory^M

Como posso fazer com que o Emacs me dê outro prompt, para que eu possa digitar a senha que o ssh-add está esperando?

Isso ocorre com o Emacs sob X11 no Debian.

Nsukami _
fonte

Respostas:

4

A maneira mais fácil seria instalar ssh-askpass. Este é o programa ssh-addexecutado quando sua entrada padrão não é um terminal, mas um display X11 está disponível. O programa ssh-askpasssolicita sua senha em uma janela da GUI separada.

Se você deseja permanecer no Emacs, ou se deseja uma solução que funcione, independentemente de o X11 estar disponível ou não, você pode solicitar ao Emacs a senha. Aqui está um código Lisp (minimamente testado) para fazer isso.

(defun ssh-add-process-filter (process string)
  (save-match-data
    (if (string-match ":\\s *\\'" string)
        (process-send-string process (concat (read-passwd string) "\n"))
      (message "%s" string))))
(defun ssh-add (key-file)
  "Run ssh-add to add a key to the running SSH agent.
Let Emacs prompt for the passphrase."
  (interactive "fAdd key: \n")
  (let ((process-connection-type t)
            process)
    (unwind-protect
        (progn
          (setq process (start-process "ssh-add" nil
                                       "ssh-add" (expand-file-name key-file)))
          (set-process-filter process 'ssh-add-process-filter)
          (while (accept-process-output process)))
      (if (eq (process-status process) 'run)
          (kill-process process)))))
Gilles 'SO- parar de ser mau'
fonte
1

A maneira mais simples de fazer isso é usar em M-x shellvez de shell-command. M-x shellé um shell real, não apenas um prompt, e deve ser capaz de interações superficiais como essa.

Sempre que você precisar usar um comando shell e nem shellestiver fazendo o que precisa, chame M-x term, que é um emulador de terminal real e deve ser capaz de executar a maioria das tarefas.

Malabarba
fonte
É assim que estou fazendo. O interessante seria: ser capaz de adicionar minha chave ssh ao agente ssh sem ser obrigado a iniciar um shell inteiro e sem sair do buffer atual.
Nsukami _