如何为不同用户名配置Git的SSH代理转发?
解决方案
1. 显式启用代理转发登录服务器
先尝试用-A参数强制开启代理转发登录other用户,验证是否是配置加载问题:
ssh -A other@box 'git clone git@server:org/repo.git'
如果此命令成功,说明你的本地~/.ssh/config未被正确加载。检查本地配置文件权限必须为600(执行chmod 600 ~/.ssh/config修复),同时确认Host *规则覆盖了目标服务器。
2. 检查服务器端sshd代理转发配置
登录服务器,查看/etc/ssh/sshd_config文件,确认存在AllowAgentForwarding yes(默认开启,但可能被修改)。若该选项为no,修改后重启sshd服务(如systemctl restart sshd)。
3. 验证other用户会话的代理环境
登录other@box后,执行以下命令确认代理转发是否生效:
echo $SSH_AUTH_SOCK ssh-add -L
若SSH_AUTH_SOCK为空,或ssh-add -L未输出你的密钥,说明代理转发未成功。需进一步检查:
- 本地
ssh-agent是否正常运行(可执行ssh-add -l验证本地密钥存在) other用户的~/.ssh/config是否存在Host * ForwardAgent no这类覆盖规则
4. 修复other用户的~/.ssh目录权限
SSH对目录权限要求严格,错误权限会导致代理或密钥失效。执行以下命令修复:
chmod 700 ~/.ssh chmod 600 ~/.ssh/*
确保~/.ssh目录仅other用户可读写,内部文件权限符合要求。
5. 强制Git使用转发代理
若以上步骤无效,可在克隆时显式指定SSH命令,强制使用转发代理:
ssh other@box 'GIT_SSH_COMMAND="ssh -o ForwardAgent=yes" git clone git@server:org/repo.git'
也可在other用户的~/.gitconfig中添加全局配置,永久生效:
[core] sshCommand = ssh -o ForwardAgent=yes
内容的提问来源于stack exchange,提问作者emily
相关产品推荐
相关产品推荐

