1. 程式人生 > >windows git:新增SSH key

windows git:新增SSH key

git如果使用https協議,每次push時都會提示輸入使用者名稱和密碼,使用ssh祕鑰(git協議)則可以避免這一麻煩。

配置方法:
1、進入目錄~/.ssh

$ cd ~/.ssh
1
在windows下,這個目錄一般為C:\Users\your_username.ssh

2、建立ssh key

$ ssh-keygen -t rsa -C "[email protected]"
1
程式碼引數含義:

-t 指定金鑰型別,預設是rsa,可以省略。
-C 設定註釋文字,比如郵箱。
-f 指定金鑰檔案儲存檔名。

以上程式碼省略了 -f 引數,因此,執行上面那條命令後會讓你輸入一個檔名,用於儲存剛才生成的ssh key程式碼,如:

Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
1
2
若不輸入直接按enter,則使用預設檔名(強烈建議這麼做!!!!),並在~/.ssh目錄下生成id_rsa和id_rsa.pub兩個檔案

然後會提示輸入密碼

Enter passphrase (empty for no passphrase): 
# Enter same passphrase again:
1
2
這個密碼是每次push時需要輸入的密碼。同樣地,也可以不輸入密碼,直接按回車跳過這個步驟,這樣以後push的時候才能不用輸密碼

之後就會顯示如下

Your identification has been saved in /c/Users/saltyfish/.ssh/id_rsa.
Your public key has been saved in /c/Users/saltyfish/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:BRxQ5G4VITTmcxEO9da8AL8MIg9Aw/2bRgQiR3D4Xto [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|    .o. oO&+*=   |
|     .o..O+* + o |
|       .o.B.+..oo|
|        .=.= oo o|
|        So*.+. o.|
|         =+o.Eo .|
|        .  .   o |
|                 |
|                 |
+----[SHA256]-----+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
3、新增ssh key到github
到key生成目錄~/.ssh下找到id_rsa.pub檔案並用編輯器開啟,複製裡面的內容;
在github->setting->SSH and GPG keys的SSH keys選擇New SSH key,將從id_rsa.pub中複製到的內容貼上進去並點選Add SSH key

這樣就OK了

4、測試ssh key
在git bash中輸入

$ ssh -T [email protected]
1
得到以下回應就算成功

$ ssh -T [email protected]
Hi qxy65535! You've successfully authenticated, but GitHub does not provide shell access.
1
2
5、使用ssh進行push
在git bash輸入remote -v檢視當前的remote url

$ git remote -v
1
若得到的連線是以https開頭的,例如

origin  https://github.com/qxy65535/tfjs_test.git (fetch)
origin  https://github.com/qxy65535/tfjs_test.git (push)
1
2
說明此時是以https協議訪問該倉庫,若配完ssh key不想每次輸密碼,需要將它替換成git協議:

$ git remote set-url origin [email protected]:qxy65535/tfjs_test.git
1
以後再用git push就不需要密碼了

遇到的問題
1、使用ssh -T出現Permission denied (publickey).
原因:SSH金鑰對不匹配。這個錯誤主要密匙全路徑名不相符,結果導致本地的SSH工具無法找到到正確的密匙。
解決:首先檢查步驟2中生成的兩個檔案是否確實在~/.ssh路徑下,如過不是,把它們移過去。
其次是非常重要的一點,如果你在步驟2中自定義了ssh key的檔名,那麼原因就在於你的命名與ssh內設定的名字不一致,因此需要手動新增祕鑰。很多教程大概不是windows系統。。直接讓輸入命令

$ ssh-add ~/.ssh/你的檔名
1
於是就有了問題2

2、執行ssh-add時出現Could not open a connection to your authentication agent
其實應該將自定義名字的祕鑰交給ssh-agent管理:GitHub help:Generating a new SSH key and adding it to the ssh-agent

# start the ssh-agent in the background
$ eval $(ssh-agent -s)
Agent pid 59566
$ ssh-add ~/.ssh/id_rsa
1
2
3
4
但是這樣很麻煩,難道每次重啟git bash都要打這麼一套前奏嗎??
當然不會,所以可以把這段程式碼加入到git bash的啟動指令碼中去。
使用編輯器開啟Git安裝目錄下的etc/bash.bashrc檔案,在末尾新增兩行

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/你的檔名
1
2
儲存退出即可。

用ssh-add除了能更改ssh祕鑰的檔名,也完全可以用來更改祕鑰的路徑,比如ssh-add your_path/your_key

遇到的問題都是起源於給ssh key檔案自定義了一個檔名。。所以沒什麼特殊要求的話,還是一路enter使用預設吧_(:3」∠)_
--------------------- 
作者:sssaltyfish 
來源:CSDN 
原文:https://blog.csdn.net/weixin_43344725/article/details/83388291 
版權宣告:本文為博主原創文章,轉載請