遇到 git@github.com: Permission denied (publickey).
這個錯誤通常意味著你的SSH金鑰沒有被GitHub識別或配置不正確。這裡有幾個步驟可以幫助你解決這個問題:
1. 檢查SSH金鑰是否已新增到GitHub
-
檢視你的SSH金鑰:
在本地機器上,你可以使用ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
(如果你的私鑰檔名不是id_rsa
,請相應更改)來檢視你的公鑰的MD5指紋。 -
登入GitHub:
在GitHub上,進入你的賬戶設定(點選右上角的頭像 -> Settings),然後點選 "SSH and GPG keys"。 -
比較指紋:
檢查GitHub上列出的SSH金鑰的指紋是否與你在本地機器上看到的指紋相匹配。如果不匹配,你可能需要新增新的金鑰或更新現有的金鑰。
如果你在執行與SSH金鑰相關的命令時遇到“沒有此目錄”的錯誤,特別是關於~/.ssh/id_rsa
,這通常意味著你的SSH金鑰對(id_rsa
和id_rsa.pub
)尚未生成,或者它們不在預期的~/.ssh
目錄下。下面是一些詳細的步驟來幫助你找到或生成SSH金鑰,並確保它們位於正確的位置。
1. 檢查~/.ssh
目錄
首先,你需要檢查你的使用者主目錄下是否存在.ssh
資料夾。在Unix-like系統(如Linux和macOS)中,你可以使用ls -a
命令來列出包括隱藏檔案在內的所有檔案和資料夾。
ls -a ~/.ssh |
如果輸出顯示.ssh
目錄不存在,那麼你需要建立它,並確保它具有適當的許可權。
2. 建立.ssh
目錄(如果它不存在)
如果.ssh
目錄不存在,你可以使用mkdir
命令來建立它,並使用chmod
命令來設定正確的許可權。
mkdir -p ~/.ssh | |
chmod 700 ~/.ssh |
這裡,700
許可權意味著只有檔案所有者可以讀取、寫入和執行該目錄(這是SSH金鑰的安全要求)。
3. 生成SSH金鑰對
一旦.ssh
目錄存在並具有正確的許可權,你就可以生成SSH金鑰對了。使用ssh-keygen
命令來做到這一點。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" |
在命令中,-t rsa
指定金鑰型別為RSA,-b 4096
指定金鑰長度為4096位(這是一種安全的選擇),-C
後面跟的是你的電子郵件地址(這是一個註釋,用於幫助識別金鑰,但它不是必需的)。
執行此命令時,系統會提示你輸入金鑰的儲存位置和檔名(預設為~/.ssh/id_rsa
),以及一個可選的密碼短語(passphrase)。如果你不想設定密碼短語,只需按回車即可跳過。
4. 驗證SSH金鑰的生成
生成金鑰後,你應該在~/.ssh
目錄下看到兩個新檔案:id_rsa
(私鑰)和id_rsa.pub
(公鑰)。你可以使用ls -l ~/.ssh
命令來驗證它們的存在。
當然,我會詳細解答第5步和第6步,這兩步涉及到將SSH公鑰新增到GitHub並測試SSH連線。
第5步:將公鑰新增到GitHub
1. 開啟公鑰檔案
首先,你需要開啟包含你的SSH公鑰的檔案。這個檔案通常是~/.ssh/id_rsa.pub
(如果你使用的是預設的RSA金鑰對名稱)。你可以使用任何文字編輯器來開啟這個檔案,比如nano
、vim
、gedit
(在GNOME桌面環境中)或TextEdit
(在macOS中,但請注意,macOS的預設文字編輯器可能會新增額外的格式,所以最好使用命令列工具或相容的純文字編輯器)。
示例(使用cat
命令在命令列中檢視):
cat ~/.ssh/id_rsa.pub |
然後,你可以複製輸出的公鑰內容。
2. 登入GitHub
在Web瀏覽器中,登入到你的GitHub賬戶。
3. 導航到SSH金鑰設定
- 點選右上角的頭像,選擇“Settings”(設定)。
- 在左側邊欄中,點選“SSH and GPG keys”(SSH和GPG金鑰)。
4. 新增新的SSH金鑰
- 在“SSH keys”部分,點選“New SSH key”(新建SSH金鑰)按鈕。
- 在“Title”(標題)欄位中,輸入一個描述性的標題,比如你的計算機名稱或電子郵件地址,以便識別這個金鑰。
- 在“Key”(金鑰)欄位中,貼上你從
id_rsa.pub
檔案複製的公鑰內容。 - 點選“Add SSH key”(新增SSH金鑰)按鈕儲存。
第6步:測試SSH連線
在將公鑰新增到GitHub之後,你應該測試SSH連線以確保一切配置正確。
1. 開啟命令列工具
在你的計算機上開啟終端或命令列介面。
2. 使用SSH命令測試連線
輸入以下命令來測試SSH連線:
ssh -T git@github.com |
這個命令嘗試使用SSH協議連線到GitHub的git
使用者,但不執行任何實際的Git命令(-T
選項禁止分配偽終端)。
3. 驗證輸出
如果SSH連線成功,你將看到一條類似於以下內容的訊息:
Hi username! You've successfully authenticated, but GitHub does not provide shell access. |
這裡的username
會被替換成你的GitHub使用者名稱。這條訊息表明你的SSH金鑰已經被GitHub成功識別,但你無法透過SSH獲得shell訪問許可權(因為GitHub不提供這種訪問)。
如果你看到許可權拒絕的錯誤,比如“Permission denied (publickey)”,那麼你需要檢查以下幾點:
- 你的公鑰是否已正確新增到GitHub。
- 你的私鑰(
id_rsa
)是否位於~/.ssh
目錄中,並且該目錄的許可權設定正確(通常為700)。 - 你的SSH客戶端配置(通常位於
~/.ssh/config
,但通常不需要更改,除非你有特殊需求)。 - 你的網路連線是否穩定,且沒有防火牆或路由規則阻止SSH連線。
按照這些步驟操作後,你應該能夠成功地將SSH公鑰新增到GitHub,並透過SSH測試連線到GitHub。