‹ 指南

代理转发(Agent Forwarding) v26.5.1+

在服务器上运行 git push 或 ssh,用手机里的密钥登录——不用把密钥复制到服务器上。

需要 Term v26.5.1 或更高版本。

Term Pro 功能。

撰写于

它解决什么问题

你用 Term 里保存的密钥连上一台服务器。接着在这台服务器上运行需要密钥的命令:从 GitHub git pull、git push 一个分支、ssh 到下一台机器。服务器上没有私钥,于是失败。

代理转发让服务器借用你的密钥。服务器上的 git 或 ssh 需要签名时,请求会沿着你的连接传回来,由 Term 在手机上完成签名。服务器拿到的是签名,而不是密钥。

有了它,远程开发机——或者在上面运行的编程代理——就能自己推送代码。

开启前后对比

同一台服务器,同样的命令。先是关闭转发时:

名为 devbox 的服务器上的终端。ssh-add -l 提示无法连接到认证代理,git clone git@git.internal:app.git 失败并提示 Permission denied (publickey)。
关闭转发。 服务器上没有密钥:ssh-add -l 找不到代理,clone 被拒绝,提示 Permission denied (publickey)。

为这台主机打开 转发代理(Agent) 之后:

同一个终端。ssh-add -l 现在列出一把 ED25519 密钥,git clone 成功接收对象,git log --oneline 显示三次提交。
开启转发。 ssh-add -l 列出了你手机里的那把密钥——只有这一把——clone 顺利完成。服务器上没有复制任何东西。

如何开启

打开主机:长按主机 → 编辑 → 高级选项 → 转发代理(Agent),然后保存。

主机编辑器高级选项中的转发代理开关,已打开,下方是说明文字。
主机编辑器 · 高级选项。 每台主机一个开关,默认关闭。

需要满足三个条件:

想确认是否生效,在服务器上运行 ssh-add -l:应该列出一把密钥。

开启之前

只对你信任的服务器开启

连接期间,这台服务器上拥有 root 权限的人可以让你的手机以你的身份签名登录。他们拿不走密钥,但在会话打开期间可以使用它。这正是它默认关闭、按主机单独开启的原因,OpenSSH 默认也是关闭的。

只有这台主机的密钥,只在连接期间

服务器只能使用这台主机登录用的那一把密钥——你的其他密钥都不会提供——也不能做别的:不能添加、删除或查看其他密钥。断开连接后就失效。

要连到另一台服务器?请改用跳板机

如果你想从跳板机到达内网机器,请设置跳板机。每一跳都从手机登录,你的密钥在跳板机上永远不可用。代理转发适用于在服务器上运行的命令,比如 git。使用跳板链时,只有最后一台主机获得代理。

如果不生效

“Could not open a connection to your authentication agent”

转发没有到达服务器。请确认这台主机的开关已打开并已保存、主机使用密钥登录且是 SSH 主机,并在开启后重新连接。有些服务器禁用了转发:服务器 sshd 配置中的 AllowAgentForwarding no。

ssh-add -l 能列出密钥,但 git 仍被拒绝

转发已经生效,只是目标端不认识这把密钥。把它的公钥添加到目标端——GitHub 在 Settings → SSH keys 中添加。