chmod with ssh key

chmod

chmod 是由 change mode 所組成,其指令功能便是更改檔案或者資料夾底下所有檔案的權限。

而權限位是由 9 個權限位來控制,每 3 位為一組,分別為

  • User
  • Group
  • Other

chmod 的八進位語法的數字說明:

  • r: read – 4
  • w: write -2
  • x: execute – 1

所以,舉個例子:

5 = 可讀可執行(4 + 1)

6 = 可讀可寫(4 + 2)

7 = 可讀可寫可執行(4 + 2 + 1)

那麼,chmod 600 則就代表著 User 可讀可寫,但 Group 和 Other 則無法使用。

chmod ssh key

若我們更改一下 ssh 的 private key,會發生什麼事呢?

如圖片測試結果所示,ssh 的 private key 僅能開放 User 的權限,

Group 和 Other 則都不能開放,否則就會無法使用。

多個帳號的 SSH Config 設定

一般的情形下,我們不會太需要去做 config 檔案的設定,

因為其實不太需要建立太多組的 SSH key 來增加管理上的麻煩;

但隨著身份的增加(大多數是因為工作關係),

我們會需要用到其他組 SSH key 來連接 git server。

如果公司使用的 git server,是我原本就沒有使用的呢?

那就沒什麼差了。

就像是我第一份工作,公司所使用的 git server 為 AWS 的 CodeCommit,

而原先我根本就不用使用到那邊的服務,所以建立一組 SSH key 在 AWS 上使用也沒什麼衝突。

且 AWS 上的教學文件,會讓你在 ~/.ssh/config 之中,以 Host 作為區別;

所以它只會在 AWS 上使用你為了 AWS 所建立的 key。

但⋯最容易發生的情形就是:

公司也使用 Github 作為組織的 git server

通常我們會有一組自己私人的 Github 帳號,若公司不反對你使用私人帳號加入組織的話,

其實你也就沒什麼差了;

但大多數的情形是會給你一組(或是請你申請一組)公司信箱的 Github 帳號,

來維護 private git repository。

Public key

我們先來看看 ssh 的 public key 裡頭,帶了哪些資訊:

重點便是最後的 xpopchi@gmail.com

這把 key 會知道是和哪個信箱綁定在一起的,所以在 Github 上,

公司和私人的帳號便無法共用同一組 SSH key。

所以我們得替公司的信箱再建立一組 SSH key

建立的流程可以看 Github 上的文件,不過會需要在建立時,替它取不同的名稱:

e.g Archie_Apple.pub

個人的習慣是在後面加上公司的名稱來做區別。

它都會放置在 ~/.ssh/ 裡頭,我們需要透過編輯 ~/.ssh/config 的方式,

以及 git url 的調整,來做到使用不同的 key 連接同一個 git server。

~/.ssh/config 的設定方式

我們透過不同的 Host 命名方式,來定義裡頭要使用的哪一把 key 去做連結:

這邊可以看到,我在 Host 那邊區隔出 github.com-Applegithub.com

意思便代表著當 SSH 的 url,host 為 github.com-Apple 時,

會使用 Archie_Apple 這把 key;

而其他的 github 就照舊使用私人帳號的那把。

最後,使用的方式

在你原先進行的 url 之中,做一些調整:

git@github.com:ArchieR7/APNsPusher.git

這是使用私人帳號的方式,而若要使用 Archie_Apple的話:

git@github.com-Apple:ArchieR7/APNsPusher.git

這樣就能夠使用另一把 key 來進行動作了。

不過最好是在 ~/.ssh/config 之中補上 user.name 和 user.email,

否則之後再進行 commit 時,都會以預設的名稱和信箱作為 commit 的作者。