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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章