Führen Sie ssh-add von Emacs aus und geben Sie eine Passphrase ein

9

Ich möchte den ssh-addShell-Befehl aufrufen . Also rufe ich auf M-x shell-command RETund tippe im Minibuffer Folgendes ein:ssh-add .ssh/id_rsa

Das einzige was ich bekomme ist:

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

Wie kann ich Emacs dazu bringen, mir eine weitere Eingabeaufforderung zu geben, damit ich die Passphrase eingeben kann, auf die ssh-add wartet?

Dies ist mit Emacs unter X11 auf Debian.

Nsukami _
quelle

Antworten:

4

Der einfache Weg wäre die Installation ssh-askpass. Dies ist das Programm, ssh-adddas ausgeführt wird, wenn sein Standardeingang kein Terminal ist, aber eine X11-Anzeige verfügbar ist. Das Programm ssh-askpassfordert Sie in einem separaten GUI-Fenster zur Eingabe Ihrer Passphrase auf.

Wenn Sie in Emacs bleiben möchten oder eine Lösung suchen, die funktioniert, unabhängig davon, ob X11 verfügbar ist oder nicht, können Sie Emacs zur Eingabe der Passphrase auffordern. Hier ist ein Lisp-Code (minimal getestet), um dies zu tun.

(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 - hör auf böse zu sein'
quelle
1

Der einfachste Weg, dies zu tun, ist die Verwendung von M-x shellanstelle von shell-command. M-x shellist eine tatsächliche Shell, nicht nur eine Eingabeaufforderung, und sie sollte in der Lage sein, flache Interaktionen wie diese durchzuführen.

Wenn Sie einen Shell-Befehl verwenden müssen und shellnicht einmal das tun, was Sie benötigen, rufen Sie M-x termstattdessen auf. Dies ist ein tatsächlicher Terminalemulator, der die meisten Aufgaben ausführen sollte.

Malabarba
quelle
Das ist eigentlich so, wie ich es mache. Das Interessante wäre: in der Lage zu sein, meinen ssh-Schlüssel zum ssh-Agenten hinzuzufügen, ohne eine ganze Shell starten zu müssen und ohne den aktuellen Puffer zu verlassen.
Nsukami _