
一般來說,當你進到一台新的機器上,沒有辦法直接使用 git,因為你的 github account 上並沒有這台機器的 ssh key。
$ git pull
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
比較正規的做法是在機器上 generate 一組 ssh key 後,將 public key 加到自己的 github account 裡。
但其實有另一個方法可以讓你更方便的用自己本機的 ssh key 來對遠端的 linux 機器操作 git - ssh agent forwarding。
1. 什麼是 ssh agent forwarding
假設我今天有一組 ssh key: id_ed25519
(private key), id_ed25519.pub
(public key),我的 github 帳號用這組 ssh keys 來做驗證(也就是我的 github 帳號上會有 id_ed25519.pub
),幫我要做 git 操作時,git 會去檢查本機的 ssh 是否有 id_ed25519
,有的話才能以這個帳號的權限用 git 做操作。
今天我登入一台 linux 機器後,假設叫做 jimmy-server
,因為 jimmy-server
上沒有 id_ed25519
,所以也就拿不到權限。
比較土法煉鋼的方法就是把 id_ed25519
複製到 jimmy-server
上,或是在 jimmy-server
上 gen 一組 ssh keys,再把新的 public key 放到 github account 底下,但兩種都偏麻煩。
ssh agent forwarding 可以將我本機上的 id_ed25519
forward 給 jimmy-server
,這麼一來我就可以在不需要複製 private key 的情況下,在 jimmy-server
上用我本機的 ssh key。
2. 操作步驟
2.1 將 private key 加到 ssh-agent
$ ssh-add ~/.ssh/id_ed25519
# 如果是 macos 的話,ssh-agent 會在重開機後就清除這個 private key,可以改用以下指令:
$ ssh-add --apple-use-keychain YOUR-KEY
2.2 調整要 forward 機器的 ssh config
Host jimmy-server
Hostname 0.0.0.0
User deploy
# 加上這行
ForwardAgent yes
2.3 連進機器後,就可以用 git 了
# 因為有調整 ssh config 的 ForwardAgent,如果沒有調整,需要在後面加上 -A
$ ssh jimmy-server