Emacsからssh-addを実行し、パスフレーズを入力します


9

ssh-addシェルコマンドを呼び出したいのですが。そこでを呼び出しM-x shell-command RET、ミニバッファーで次のように入力します。ssh-add .ssh/id_rsa

私が得る唯一のものは:

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

Emacsに別のプロンプトを表示させて、ssh-addが待機しているパスフレーズを入力するにはどうすればよいですか?

これは、DebianのX11でのEmacsの場合です。

回答:


4

簡単な方法は、インストールすること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)))))

1

これを行う最も簡単な方法は、のM-x shell代わりにを使用することですshell-commandM-x shellは単なるプロンプトではなく実際のシェルであり、このような浅い相互作用が可能である必要があります。

シェルコマンドを使用するshell必要があり、必要なことを実行していない場合でも、M-x term代わりに呼び出します。これは実際のターミナルエミュレータであり、ほとんどのタスクを実行できます。


これが実際のやり方です。興味深いのは、シェル全体を起動する必要がなく、現在のバッファーを離れることなく、sshキーをssh-agentに追加できることです。
Nsukami _ 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.