Android Studio处理Github代码遇到的多个SSH Key问题

    准备在Github上创建一个新的仓库,用来记录平时的代码等相关积累。

    通过查阅资料,使用Android Studio创建了一个新的仓库,但是在提交代码的时候,出现了如下错误:

22:53:28.874:  git -c core.quotepath=false push --progress --porcelain origin refs/heads/master:master --set-upstream
java.io.IOException: There was a problem while connecting to github.com:22
	at com.trilead.ssh2.Connection.connect(Connection.java:791)
	at com.trilead.ssh2.Connection.connect(Connection.java:577)
	at org.jetbrains.git4idea.ssh.SSHMain.start(SSHMain.java:172)
	at org.jetbrains.git4idea.ssh.SSHMain.main(SSHMain.java:138)
Caused by: java.io.IOException: Key exchange was not finished, connection is closed.
	at com.trilead.ssh2.transport.KexManager.getOrWaitForConnectionInfo(KexManager.java:92)
	at com.trilead.ssh2.transport.TransportManager.getConnectionInfo(TransportManager.java:230)
	at com.trilead.ssh2.Connection.connect(Connection.java:743)
	... 3 more
Caused by: java.io.IOException: Cannot negotiate, proposals do not match.
	at com.trilead.ssh2.transport.KexManager.handleMessage(KexManager.java:413)
	at com.trilead.ssh2.transport.TransportManager.receiveLoop(TransportManager.java:754)
	at com.trilead.ssh2.transport.TransportManager$1.run(TransportManager.java:469)
	at java.lang.Thread.run(Thread.java:745)
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

    通过经验推断,跟SSH鉴权失败有关,同时,发现在Android studio的偏好设置中的Git选项内,勾选了SSH选项,如下:


这时,考虑将在GitHub上来添加SSH Key。进入GitHub->Settings,如下:


这时,可以找到添加入口。由于电脑本地已经配置过一个ssh key,使用的是公司项目的账号与邮箱,为了避免混淆,需要重新生成一个Key。ssh-keygen的指令不需要赘述,但是要注意,在创建的时候,需要重新命名你的新key的存储文件名,不能使用默认的,因为如果原来的key使用的默认的文件名(id_rsa),则会覆盖。


我给单独的github的key文件单独增加了一个后缀,用以区别默认的key文件名。接下来,需要将该key添加到ssh-agent中,使用ssh-add命令。


OK,到此已经重新创建了一个GitHub的SSH Key。那么将此key添加到GitHub账号设置页面中去,按照页面入口即可完成。重新Push代码后发现,错误依旧。考虑到目前同时存在两个Key,这里参考了一篇博客:点击打开链接,讲解了如何处理多个SSH Key对应不同Git主机的情况。在.ssh路径下,如果没有就创建一个名为config的文件,单独给GitHub的SSH来配置,如下:


HostName是对应的主机名,User是主机用户名,而Github仓库路径-ssh://[email protected]:username/XXX.git中前面的[email protected]可以被替换成Host所表示的名字,所以Host名字自定义。

保存config文件并退出。继续在Studio上尝试Push,发现推送成功!另外注意,所有本地Git仓库中的git config对应的user.name和user.email不要配置成全局的,不然会产生影响,导致所有仓库都乱套。


发布了7 篇原创文章 · 获赞 0 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章