Ejecute ssh-add desde Emacs e ingrese una frase de contraseña

9

Quiero llamar al ssh-addcomando de shell. Entonces invoco M-x shell-command RET, y en el minibúfer, escribo:ssh-add .ssh/id_rsa

Lo único que obtengo es:

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

¿Cómo puedo hacer que Emacs me dé otro aviso, para que pueda escribir la frase de contraseña que ssh-add está esperando?

Esto es con Emacs bajo X11 en Debian.

Nsukami _
fuente

Respuestas:

4

La forma fácil sería instalarlo ssh-askpass. Este es el programa que se ssh-addejecuta cuando su entrada estándar no es un terminal, pero hay una pantalla X11 disponible. El programa ssh-askpasssolicita su frase de contraseña en una ventana GUI separada.

Si desea permanecer dentro de Emacs, o si desea una solución que funcione si X11 está disponible o no, puede hacer que Emacs solicite la frase de contraseña. Aquí hay un código Lisp (mínimamente probado) para hacer esto.

(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- deja de ser malvado'
fuente
1

La forma más sencilla de hacerlo es usar en M-x shelllugar de shell-command. M-x shelles un shell real, no solo un indicador, y debería ser capaz de interacciones superficiales como esta.

Siempre que necesite usar un comando de shell e incluso shellno esté haciendo lo que necesita, llame en su M-x termlugar, que es un emulador de terminal real y debe ser capaz de realizar la mayoría de las tareas.

Malabarba
fuente
Esta es realmente la forma en que lo estoy haciendo. Lo interesante sería: poder agregar mi clave ssh al agente ssh sin estar obligado a iniciar un shell completo y sin abandonar el búfer actual.
Nsukami _