星期四, 12月 15, 2016

用指定的 SSH key 來操作 git

一般來說,都是直接使用 $HOME/.ssh 下這把預設產生的 id_rsa/id_rsa.pub 。那如果要使用另外的 SSH key 該怎麼辦呢?
這時候可以使用 GIT_SSH 這個環境變數搭配自訂的腳本來做:
  1. 先新增一個 custom_ssh.sh:
    #!/bin/sh
    exec /usr/bin/ssh -o StrictHostKeyChecking=no -i /home/me/my_private_key "$@"
    
  2. 在使用 git 的時候,提供 GIT_SSH 環境變數
    GIT_SSH="custom_ssh.sh" git clone your_repository
    ,這樣就可以了。
在什麼情況會用到額外的 SSH key 呢? 最常見的例子就是佈署:在 gitlab/github 裡可以有所謂的 deploy key,這樣在佈署的時候,就可以不提供自己的 SSH key 來做佈署,只透過這把 deploy key 來取得原始碼,增加安全性。
誰有用到 GIT_SSH ?
  1. Jenkins 裡可以新增 SSH key ,讓你在存取 repository 時,使用這把 SSH key。實際上 Jenkins 內部也是利用 GIT_SSH 的方法在運作,但並不是全部。
  2. Ansible 的 git module 也使用了 GIT_SSH 這個技巧 (應該是)。
也可以使用 ssh-add 搭配 ssh-agent 來替代 GIT_SSH 的作法,這樣就可以不需要額外新增一個自訂的腳本了。
產生獨立 SSH Key 的方法:
ssh-keygen -C your_comment -b 4096 -m pem -f key_filename -q -P "" -N "" 
執行上面的指令後,會產生兩個檔案,一個是公鑰,一個是私鑰。在要複製到別的地方使用時,要注意 permission 必須是 0600,僅允許擁有者存取才行。
參考自:Git clone with custom SSH using GIT_SSH error - Stack Overflow

沒有留言: