无法推送至远程Git仓库:新开发者权限配置异常排查
排查Git推送权限问题的思路和解决方案
这个问题大概率和Git Bash使用的OpenSSH客户端与PuTTY的密钥不兼容有关,结合你遇到的报错和日志信息,咱们一步步来拆解:
1. 先确认Git Bash的SSH能否正常登录服务器
PuTTY能登录不代表Git Bash的SSH客户端也能登录——两者用的是不同的密钥管理体系:PuTTY用自己的.ppk格式密钥,而Git Bash默认用OpenSSH的密钥格式。你可以让开发者在Git Bash里执行:
ssh ramon@[server.name]
如果登录失败,那就是Git Bash的SSH没正确加载对应密钥,这是核心问题。
解决方法:转换PuTTY密钥为OpenSSH格式
- 打开PuTTYgen,加载开发者当前用来登录的
.ppk私钥 - 点击菜单栏的
Conversions->Export OpenSSH key,保存为id_rsa(注意不要加后缀) - 把这个
id_rsa文件放到开发者Windows用户目录下的.ssh文件夹,也就是C:\Users\raimo\.ssh\ - 关键:设置私钥权限:右键
id_rsa-> 属性 -> 安全选项卡,删除所有其他用户的权限,只保留raimo用户的“读取”和“写入”权限(OpenSSH对私钥权限要求很严格,权限太宽会拒绝使用)
2. 检查本地Git仓库的远程URL是否正确
有时候克隆时可能默认用了本地Windows用户名raimo,而不是服务器上的ramon,导致推送时用错账号。让开发者在Git Bash里执行:
git remote -v
如果输出里的远程URL是raimo@[server.name]:/var/git/[repository name],就需要改成正确的账号:
git remote set-url origin ramon@[server.name]:/var/git/[repository name]
3. 确认服务器上authorized_keys的权限和格式
即使公钥已经添加,权限不对或者格式错误也会导致sshd拒绝:
- 在服务器上执行以下命令,确保权限符合要求:
chmod 700 ~ramon/.ssh chmod 600 ~ramon/.ssh/authorized_keys
- 检查
authorized_keys文件里的公钥是单独一行,没有多余空格、换行或截断——开发者提供的公钥ssh-rsa [key blablablabla] raimo@DESKTOP要完整占一行。
4. 理解报错“fatal: protocol error: bad line length character: ramo”的原因
这个报错本质是Git在SSH连接时收到了非Git协议的输出(比如SSH登录失败的错误信息ramo@server: Permission denied),把这些错误文本当成了Git协议内容,从而抛出格式错误。解决了前面的SSH登录问题,这个报错自然会消失。
内容的提问来源于stack exchange,提问作者PaulJ
相关产品推荐
相关产品推荐

