Git Daemon over SSH报错:protocol error及连接拒绝问题求助
问题诊断与快速修复
嘿,这个问题其实是典型的协议混用错误,咱们一步步理清楚:
为啥会报错?
你启动的git daemon是用Git原生的git://明文协议工作的,但你客户端却用了ssh://的URL去连它的2222端口——这就好比用微信去打QQ电话,肯定连不上啊!
服务器端的git daemon收到SSH的握手开头(就是那个SSH-字符),完全看不懂,所以直接抛出了protocol error,客户端那边自然就显示连接被拒绝了。
两种解决办法,选一个就行
办法一:老老实实给git daemon用对协议
如果你确实想用git daemon来共享仓库,把客户端的clone命令改成git://协议:
git clone git://<server>:2222/home/gitproxy/git
另外提个醒:git daemon默认是只读的,要是需要推代码,启动的时候得加个参数:
git daemon --port=2222 --verbose --enable=receive-pack
别忘了开服务器防火墙的2222端口,不然客户端还是连不上。
办法二:直接用SSH(更推荐,不用折腾git daemon)
既然你已经配好了SSH密钥,能无密码登gitproxy,还能正常跑git-receive-pack,那完全没必要启动git daemon啊!直接用SSH协议克隆就行:
git clone gitproxy@<server>:/home/gitproxy/git
这种方式用SSH加密传输,安全得多,还不用额外开服务、开端口,完美匹配你现有的配置。
验证一下
用办法二的命令克隆后,你直接拉取、推送都没问题,本质上和你之前测试的git-receive-pack是一个逻辑——Git通过SSH远程调用对方的Git命令来传输数据。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

