回答:
簡単な方法は、インストールすることssh-askpass
です。これは、ssh-add
標準入力が端末ではなくX11ディスプレイが利用可能な場合に実行されるプログラムです。プログラムssh-askpass
は、別のGUIウィンドウでパスフレーズの入力を求めます。
Emacs内にとどまりたい場合、またはX11が使用可能かどうかに関係なく機能するソリューションが必要な場合は、Emacsにパスフレーズを要求させることができます。これを行うための(最低限テストされた)Lispコードを以下に示します。
(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)))))
これを行う最も簡単な方法は、のM-x shell
代わりにを使用することですshell-command
。
M-x shell
は単なるプロンプトではなく実際のシェルであり、このような浅い相互作用が可能である必要があります。
シェルコマンドを使用するshell
必要があり、必要なことを実行していない場合でも、M-x term
代わりに呼び出します。これは実際のターミナルエミュレータであり、ほとんどのタスクを実行できます。