git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.

def_Class發表於2024-07-21

遇到 git@github.com: Permission denied (publickey). 這個錯誤通常意味著你的SSH金鑰沒有被GitHub識別或配置不正確。這裡有幾個步驟可以幫助你解決這個問題:

1. 檢查SSH金鑰是否已新增到GitHub

  1. 檢視你的SSH金鑰:
    在本地機器上,你可以使用 ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub(如果你的私鑰檔名不是id_rsa,請相應更改)來檢視你的公鑰的MD5指紋。

  2. 登入GitHub:
    在GitHub上,進入你的賬戶設定(點選右上角的頭像 -> Settings),然後點選 "SSH and GPG keys"。

  3. 比較指紋:
    檢查GitHub上列出的SSH金鑰的指紋是否與你在本地機器上看到的指紋相匹配。如果不匹配,你可能需要新增新的金鑰或更新現有的金鑰。

如果你在執行與SSH金鑰相關的命令時遇到“沒有此目錄”的錯誤,特別是關於~/.ssh/id_rsa,這通常意味著你的SSH金鑰對(id_rsaid_rsa.pub)尚未生成,或者它們不在預期的~/.ssh目錄下。下面是一些詳細的步驟來幫助你找到或生成SSH金鑰,並確保它們位於正確的位置。

1. 檢查~/.ssh目錄

首先,你需要檢查你的使用者主目錄下是否存在.ssh資料夾。在Unix-like系統(如Linux和macOS)中,你可以使用ls -a命令來列出包括隱藏檔案在內的所有檔案和資料夾。

bash複製程式碼
ls -a ~/.ssh

如果輸出顯示.ssh目錄不存在,那麼你需要建立它,並確保它具有適當的許可權。

2. 建立.ssh目錄(如果它不存在)

如果.ssh目錄不存在,你可以使用mkdir命令來建立它,並使用chmod命令來設定正確的許可權。

bash複製程式碼
mkdir -p ~/.ssh
chmod 700 ~/.ssh

這裡,700許可權意味著只有檔案所有者可以讀取、寫入和執行該目錄(這是SSH金鑰的安全要求)。

3. 生成SSH金鑰對

一旦.ssh目錄存在並具有正確的許可權,你就可以生成SSH金鑰對了。使用ssh-keygen命令來做到這一點。

bash複製程式碼
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金鑰對名稱)。你可以使用任何文字編輯器來開啟這個檔案,比如nanovimgedit(在GNOME桌面環境中)或TextEdit(在macOS中,但請注意,macOS的預設文字編輯器可能會新增額外的格式,所以最好使用命令列工具或相容的純文字編輯器)。

示例(使用cat命令在命令列中檢視):

bash複製程式碼
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連線:

bash複製程式碼
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。

相關文章