在伺服器上執行 git push 或 ssh,用手機裡的金鑰登入——不用把金鑰複製到伺服器上。
需要 Term v26.5.1 或更新版本。
Term Pro 功能。
撰寫於
你用 Term 裡儲存的金鑰連上一台伺服器。接著在這台伺服器上執行需要金鑰的指令:從 GitHub git pull、git push 一個分支、ssh 到下一台機器。伺服器上沒有私鑰,於是失敗。
代理轉發讓伺服器借用你的金鑰。伺服器上的 git 或 ssh 需要簽署時,請求會沿著你的連線傳回來,由 Term 在手機上完成簽署。伺服器拿到的是簽署結果,而不是金鑰。
有了它,遠端開發機——或者在上面執行的編程代理——就能自己推送程式碼。
同一台伺服器,同樣的指令。先是關閉轉發時:
ssh-add -l 找不到代理,clone 被拒絕,提示 Permission denied (publickey)。為這台主機開啟 轉發代理(Agent) 之後:
ssh-add -l 列出了你手機裡的那把金鑰——只有這一把——clone 順利完成。伺服器上沒有複製任何東西。打開主機:長按主機 → 編輯 → 進階選項 → 轉發代理(Agent),然後儲存。
需要滿足三個條件:
想確認是否生效,在伺服器上執行 ssh-add -l:應該列出一把金鑰。
連線期間,這台伺服器上擁有 root 權限的人可以讓你的手機以你的身份簽署登入。他們拿不走金鑰,但在工作階段開啟期間可以使用它。這正是它預設關閉、按主機單獨開啟的原因,OpenSSH 預設也是關閉的。
伺服器只能使用這台主機登入用的那一把金鑰——你的其他金鑰都不會提供——也不能做別的:不能新增、刪除或檢視其他金鑰。中斷連線後就失效。
如果你想從跳板機到達內網機器,請設定跳板機。每一跳都從手機登入,你的金鑰在跳板機上永遠不可用。代理轉發適用於在伺服器上執行的指令,例如 git。使用跳板鏈時,只有最後一台主機獲得代理。
轉發沒有到達伺服器。請確認這台主機的開關已開啟並已儲存、主機使用金鑰登入且是 SSH 主機,並在開啟後重新連線。有些伺服器停用了轉發:伺服器 sshd 設定中的 AllowAgentForwarding no。
ssh-add -l 能列出金鑰,但 git 仍被拒絕轉發已經生效,只是目標端不認識這把金鑰。把它的公鑰加入目標端——GitHub 在 Settings → SSH keys 中加入。