トップ «前の日記(2004-03-02 (Tue)) 最新 次の日記(2004-03-08 (Mon))» 編集

猫熊は燃えつきた?!日記

最近なんにもやっていませんが、なにかやったらこちらに置くようにしています。
2002|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|
2011|09|
2012|02|


2004-03-04 (Thu) ぼろぼろ [長年日記]

ssh-agent.el

藤原さんちから。telnet(というか putty か)から入っているときは ssh-agent 立ち上がっていないし便利。けど、少々粗削りなところがあったので(ほぼ、ぼく向けに手抜きで)修正した。ぼくが使っている ssh は OpenSSH_3.7.1p2。
--- ssh-agent.el	2004/03/04 10:15:38	1.1
+++ ssh-agent.el	2004/03/04 10:17:06
@@ -21,7 +21,7 @@
 ;; Run ssh-agent and ssh-add as emacs processes, setting the proper env
 ;; variables, and accepting password input
 
-(defcustom ssh-agent-buffer "*ssh-agent*"
+(defcustom ssh-agent-buffer " *ssh-agent*"
   "buffer to display ssh-agent output in"
   :type 'string
   :group 'ssh-agent)
@@ -51,7 +51,7 @@
   :type 'string
   :group 'ssh-agent)
 
-(defcustom ssh-add-invalid-prompt "Bad passphrase, try again:"
+(defcustom ssh-add-invalid-prompt "Bad passphrase, try again for \\([^:]+\\):"
   "ssh-add prompt indicating an invalid passphrase"
   :type 'string
   :group 'ssh-agent)
@@ -59,10 +59,28 @@
 (defun ssh-agent ()
   "execute the ssh-agent"
   (interactive)
-  (let ((args (split-string ssh-agent-args)))
-    (set-process-filter
-     (apply #'start-process "ssh-agent" nil ssh-agent-program args)
-     #'ssh-agent-process-filter)))
+  (let ((args (split-string ssh-agent-args))
+	(sshagent (getenv "SSH_AGENT_PID"))
+	(sshadd (ssh-noadd-check)))
+    (cond
+     ((and sshagent sshadd)
+      (ssh-add-run))
+     ((not sshagent)
+      (set-process-filter
+       (apply #'start-process "ssh-agent" nil ssh-agent-program args)
+       #'ssh-agent-process-filter)
+      (add-hook 'kill-emacs-hook 'ssh-agent-kill))
+     (t
+      (message "no want.")))))
+
+(defun ssh-noadd-check ()
+  (with-temp-buffer
+    (call-process ssh-add-program nil (current-buffer) nil "-l")
+    (goto-char (point-min))
+    (looking-at "^The agent has no identities.")))
+
+(defun ssh-agent-kill ()
+  (call-process ssh-agent-program nil nil nil "-k"))
 
 (defun ssh-add-run ()
   "run ssh-add"
@@ -73,9 +91,13 @@
 
 (defun ssh-agent-process-filter (process input)
   "filter for ssh-agent input"
-  (cond ((ssh-agent-read-var "SSH_AUTH_SOCK" input)
-         (ssh-add-run))
-        ((ssh-agent-read-var "SSH_AGENT_PID" input))))
+  (let ((lines (split-string input "\n")))
+    (while lines
+      (cond ((ssh-agent-read-var "SSH_AUTH_SOCK" (car lines))
+	     ())
+	    ((ssh-agent-read-var "SSH_AGENT_PID" (car lines))
+	     (ssh-add-run)))
+      (setq lines (cdr lines)))))
 
 (defun ssh-agent-read-var (var line)
   "read a shell script variable from ssh-agent's output"
@@ -83,17 +105,21 @@
       (with-current-buffer (get-buffer-create ssh-agent-buffer)
         (let ((value (match-string 1 line)))
           (setenv var value)
-          (insert line))
+          (insert line "\n"))
         t)))
 
 (defun ssh-add-process-filter (process input)
   "filter for ssh-add input"
+  (when (string-match "^\n" input)
+    (setq input (substring input 1)))
   (cond ((string-match ssh-add-prompt input)
          (ssh-send-passwd process input))
         ((string-match ssh-add-invalid-prompt input)
          (ssh-send-passwd process input))
         (t (with-current-buffer (get-buffer-create ssh-agent-buffer)
-             (insert input)))))
+	     (when (string-match "^Identity added:" input)
+	       (message input))
+             (insert "\n" input)))))
 
 (defun ssh-send-passwd (process prompt)
   "read a password with `read-passwd` and pass it to the ssh-add process"
@@ -102,3 +128,4 @@
     (process-send-string process "\n")
     (clear-string passwd)))
 
+(provide 'ssh-agent)
立ち上げた ssh-agent を止めないから、勝手に増殖していたことと、process filter の入力が各ラインでばらばらにくると仮定していたところはちょっとなぁ。。。

と、

こんなことをやっている場合じゃない。

XKeymacs

2004/3/2 version 2.59
- Mozilla Firefox 上で M-v が期待通りに動かない問題を解消。
とのこと。ちょっと動きが変かもしれない。

書いている人: 白井秀行 (mailto:shirai@meadowy。org)
訪問して下さった人: 今日: 人, 昨日: , 過去: 人 (2007年5月10日から)
RDF Feed