Jimmy 的架站筆記

嗨~我是 Jimmy!我可能不是你認識的第 1 個 Jimmy,但一定是最帥的那個。


如何在 linux 上操作 git - ssh agent forwarding

By Jimmy 2025-07-12
發表於 開發工具
如何在 linux 上操作 git - ssh agent forwarding

一般來說,當你進到一台新的機器上,沒有辦法直接使用 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 裡。

Adding a new SSH key to your 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

3. 參考資料

SSH agent forwarding 的應用
Using SSH agent forwarding


你可能也會喜歡

git 常用指令整理

git 常用指令整理

雖然已經每天跟 git 為伍了,也有把常用指令整理整理在一個 markdown 檔,但還是放到網頁上在開發的時候比較容易看~

Read More
你可能不懂 npx

你可能不懂 npx

好吧,也有可能只有我不懂 🤣 最近在深入研究一些前端的技術,才發現一直以來對 npx 的理解好像有一些誤解,於是花了點時間釐清一下錯誤的觀念。

Read More
解決 npm command not found 問題

解決 npm command not found 問題

從某個時間點開始,我用 npm install -g [dependency] 在全域安裝套件後,卻無法執行該套件的 cli,ex:ts-node、ng(Angular cli)等等,雖然每次都有找到解法,就是去 export 目前 npm install -g 後存在的 path 位置,但每次用套件的 cli 都要重新 export 一次實在很麻煩,昨天終於意外找到解法了🤣

Read More