VSCode Devcontainer执行git fetch遇公钥权限拒绝问题复现求助
已经确认ssh-agent运行且密钥加载,可从以下方向进一步排查:
验证密钥与GitHub账号的绑定状态
在容器终端执行ssh -T git@github.com测试连通性,正常应返回你的GitHub用户名。若仍提示权限拒绝,需登录GitHub账号检查「SSH和GPG密钥」列表,确认对应公钥存在、未过期且未被误删除。检查Devcontainer的SSH代理转发配置
确保.devcontainer/devcontainer.json中正确配置了SSH代理转发:"mounts": [ "source=${env:SSH_AUTH_SOCK},target=/run/host-services/ssh-auth.sock,type=bind", "source=${env:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=consistent" ], "remoteEnv": { "SSH_AUTH_SOCK": "/run/host-services/ssh-auth.sock" }修改配置后重启Devcontainer,再测试Git操作。
修正容器内SSH文件权限
容器内执行ls -la ~/.ssh/,检查.ssh目录权限是否为700,密钥文件(如id_rsa)权限是否为600。权限过宽会被SSH拒绝,可通过以下命令修正:chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa确认Git远程仓库地址正确性
执行git remote -v查看远程仓库地址,确保是SSH格式(git@github.com:用户名/仓库名.git)而非HTTPS格式。若地址正确,检查用户名和仓库名是否存在拼写错误。排查SSH配置文件冲突
查看容器内~/.ssh/config文件,若存在针对github.com的特殊配置(如指定错误密钥、代理),可暂时注释后测试。例如:# Host github.com # IdentityFile ~/.ssh/wrong_key_file确认容器内SSH代理的关联状态
容器内执行echo $SSH_AUTH_SOCK,检查输出路径是否指向主机的SSH代理套接字(如/run/host-services/ssh-auth.sock)。若输出为空,说明代理转发未生效,需重新检查Devcontainer的挂载配置。
内容的提问来源于stack exchange,提问作者BLambert

