Pages

2013年2月26日火曜日

Magitでpushする直前にsshの鍵のパスフレーズを入力する

私はsshの鍵をgithub用、bitbucket用で作っていて

eval `ssh-agent`
ssh-add githubの秘密鍵の場所
ssh-add bitbucketの秘密鍵の場所


という風に.xprofileに設定していたのですが、
私はlazyな人間なのでパソコンを起動するときにパスフレーズを入力するのが
やになってきたのでmagitでpushするときにssh-addするようにしてみました。
(eval `ssh-agent`は必要かも)

Emacs用のコード

~/.emacs.d/init.elなどの設定ファイルに以下のコードを追加します。
(Magitの設定をおこなっているところがいいと思います)

(defun my/ssh-add ()
(interactive)
(let* ((github "github用の秘密鍵の場所") ; 例: "~/.ssh/github/id_rsa"
(bitbucket "bitbucket用の秘密鍵の場所")
(ssh-add
(lambda (filepath)
(unless (string< "" (shell-command-to-string
(concat "ssh-add -l | grep " filepath)))
(shell-command (concat "ssh-add " filepath)))))
match)
(goto-char (point-min))
(when (search-forward-regexp
"^Remote: master @ origin (\\(.*\\))" nil t)
(setq match (match-string 0))
(when (string-match "git@bitbucket.org" match)
(funcall ssh-add bitbucket))
(when (string-match "git@github.com" match)
(funcall ssh-add github)))))

(defadvice magit-push
(around ad-magit-push activate)
(my/ssh-add)
ad-do-it)

参考

~/.ssh/configの設定です。

Host bitbucket
HostName bitbucket.org
IdentityFile bitbucket用の秘密鍵の場所
User git
Compression yes
Ciphers arcfour256

Host github
HostName github.com
IdentityFile github用の秘密鍵の場所
User git
Compression yes
Ciphers arcfour256

0 件のコメント:

コメントを投稿