TypeCodes

Coding.net上git仓库ssh地址的"bug"

前段时间在用Coding.net同步git仓库时,能正常使用非https的ssh协议,但是这两天在自己的Windows机器上push内容时,报如下图中的错误Permission denied (publickey).

Coding.net报错Permission denied (publickey)

1 查找原因

查了下Coding.net上这个项目的ssh地址如图所示:

Coding.net上这个项目的ssh地址

它和我的Windows机器上该项目的G:\php\htdocs\CodingNet\mylnmp\.git\config文件中的配置是一样的(url = git@git.coding.net:vfhky/mylnmp.git),如下图所示:

本地git项目的ssh地址

对于Permission denied错误,按理说git项目地址没问题,那只能是ssh公私钥不对了。于是又用Git Bash重新生成了一对SSH公私钥,并把公钥放到Coding.net上。结果执行git push origin master推送命令时,还是报一样的错误。

在Google上找了好久都没找到原因所在,没办法就只能将仓库切换到https协议。这样每次push或者pull的时候,都需要输入用户名和密码,比较麻烦。

2 对比GitHub的ssh地址发现Coding.net的“bug” 【!!!经指正,其实是我自己弄错了!!!】

下午无意之间看到了自己GitHub上一个仓库的ssh命名git@github.com:vfhky/mylnmp.git,它和上面Coding.net的ssh地址是有区别的。Github的ssh地址中是直接@域名的,而Coding.net的ssh地址是@git.域名

3 解决方法 【!!!经指正,该方法是错误的!!!】

于是,立马尝试把本地Coding.net项目中的ssh地址改成类似于GitHub的ssh地址:

######Coding.net上git仓库ssh地址的bug
url = git@git.coding.net:vfhky/mylnmp.git
改成正确的ssh地址
url = git@coding.net:vfhky/mylnmp.git
4 结束

改完之后,重新执行git push命令,就正常了。在遇到到如下错误时,基本可以从git地址和ssh公私钥是否都正确这两方面来解决。

vfhky@VFHKY-PC /g/php/htdocs/CodingNet/mylnmp (master)
$ git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

vfhky@VFHKY-PC /g/php/htdocs/CodingNet/mylnmp (master)
$
4 update 2015.07.01 15:12 【正确的解决方法】

经过 @yucong sun 的指正,之前是由于本地Win机上的~/.ssh/config文件配置的主机名是Host coding.net而不是Host git.coding.net,所以git项目中配置的url = git@git.coding.net:vfhky/mylnmp.git,无法匹配到这个主机名Host。

因此,只要把~/.ssh/configHost coding.net改成Host git.coding.net就行了,如下图所示。这里由于自己的考虑不周,误会“小猴子”了,抱歉抱歉!

Win机上的~/.ssh/config文件配置

打赏支持

Comments »