在服务器上运行 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 中添加。