2010年2月18日 星期四

使用 keychain 管理 ssh 金鑰

一般來說要利用 ssh key 來做 remote ssh login 的時候,就會需要用到 ssh-agent。大多使用下列命令來啟動 ssh-agent

$ echo `ssh-agent` > .agent

如此會將 ssh-agent 的環境變數如 pid 等等輸出至 .agent 檔案內。

接著使用:

$ source .agent

將 .agent 環境變數載入進來。

接下來再使用 ssh-add 命令來將私有金鑰載入:

$ ssh-add path/to/key1

在 ~/.ssh/config 內,加入

Host yourhost.com
IdentityFile path/to/key1

以告知 ssh 使用 path/to/key1 的 private key,但記得將 key1.pub (public key) 新增至 remote 的 .ssh/authorized_keys 檔案內。

前面所敘述的 ssh-agent 命令使用時常會遇到管理的問題,所以還得自己寫 script 檢查是否已有既有的 ssh-agent 正在運行等等之類的繁瑣事項。而 keychain 則是一套 script 可幫你處理這些問題。

在 ubuntu 底下安裝 keychain:

$ sudo apt-get install keychain

以 macports :

$ sudo port install keychain



使用方式很簡單,不需要自己 launch 一個 ssh-agent ,只需直接呼叫 keychain 命令將 private key 載入:

$ keychain path/to/key1

接著 keychain 會告知該 ssh-agent 環境變數的檔案位置,提供給不同 shell 使用的 script ,只需將該檔案的 path 加入至 .bashrc 或 .zshrc ...

$ source ~/.keychain/....blah

即可。如此一來每當開新環境時,就不需再去檢查 ssh-agent pid ,或有 ssh-agent,就直接使用既有的的,若無,則 launch 一個新的 ssh-agent 並且更新 ssh-agent 的環境變數。

以下是我用來載入金鑰的 script:



由於我都將 public key , private key 放置於 ~/.ssh/keys 內,該 script 用以自動將 private key 載入。