簡體   English   中英

GitHub 錯誤消息 - 權限被拒絕(公鑰)

[英]GitHub Error Message - Permission denied (publickey)

有人看到此錯誤並知道該怎么做嗎?

我正在使用終端,我在根目錄下,GitHub 存儲庫存在,我現在不知道該怎么辦。

> git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

GitHub 無法對您進行身份驗證。 所以,要么你沒有設置 SSH 密鑰,因為你沒有在你的機器上設置一個,要么你的密鑰沒有與你的 GitHub 帳戶相關聯。

您還可以使用 HTTPS URL 而不是 SSH/git URL,以避免處理 SSH 密鑰。 這是GitHub 推薦的方法

此外,GitHub 有一個專門針對該錯誤消息的幫助頁面,並更詳細地解釋了您可以檢查的所有內容。

我知道這個問題。 添加 ssh 密鑰后,也將 ssh 密鑰添加到 ssh 代理(來自官方文檔

ssh-agent -s
ssh-add ~/.ssh/id_rsa

一切正常后,git可以查看正確的密鑰,之前不能。

您是否在 ~/.ssh 目錄中創建了配置文件? 它應該有如下內容:

Host github.com 
 IdentityFile ~/.ssh/github_rsa

假設您創建了一個名為github_rsa的 ssh 密鑰

並將其上傳到 GitHub...

注意:如果您的 ~/.ssh/ 目錄中有超過 1 個密鑰(2 個或更多),則必須遵循這種顯式配置方式。 如果你不這樣指定密鑰,那么按順序取第一個密鑰並用於 github 身份驗證,因此它取決於密鑰文件名。

您需要生成一個 SSH 密鑰(如果您沒有)並將公鑰與您的 Github 帳戶相關聯。 請參閱Github 自己的文檔

這發生在我身上。 由於某種原因,我的起源在我沒有意識到的情況下搞砸了:

檢查您的設置是否仍然正確

git remote -v

url 需要類似於 ssh://git@github.com/YourDirectory/YourProject.git; 如果您沒有看到 git@github.com,請使用

git remote set-url origin git://github.com/YourDirectory/YourProject.git

正確設置。 或者您可以使用 github 應用程序在特定存儲庫的設置面板中檢查並設置主遠程存儲庫 url。

如果您將 ssh 訪問更改為對遠程存儲庫的 https 訪問,則問題已解決:

git remote set-url origin https_link_to_repository

git push -u origin master

假設您通過 SSH 連接 GitHub,您可以運行以下命令來確認這一點。

$git config --get remote.origin.url

如果您得到的結果具有以下格式 git@github.com:xxx/xxx.github.com.git,那么您應該執行以下操作。

生成一個 SSH 密鑰(或使用現有的)。 如果您有,您只需將您的密鑰添加到 ssh-agent(步驟 2)和您的 GitHub 帳戶(步驟 3)。

以下適用於那些沒有 SSH 密鑰的人。

步驟 1生成公鑰/私鑰 rsa 密鑰對。

$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

系統將要求您確認 SSH 密鑰的保存位置以及要使用的密碼。

步驟 2將您的密鑰添加到 ssh-agent

  • 確保 ssh-agent 已啟用

    $eval "$(ssh-agent -s)"

  • 將 SSH 密鑰添加到 ssh-agent:

    $ssh-add ~/.ssh/id_rsa

步驟 3將您的 SSH 密鑰添加到您的帳戶

$sudo apt-get install xclip

$xclip -sel clip < ~/.ssh/id_rsa.pub

然后將復制的密鑰添加到 GitHub

轉到設置-> SSH 密鑰(個人設置側欄)->添加 SSH 密鑰-> 填寫表格(密鑰在剪貼板上,只需使用 ctrl+v)->添加密鑰

完成上述步驟后,您應該解決權限問題。

參考鏈接:生成 SSH 密鑰

另一個解決方案:

創建 SSH 密鑰,輸入ssh-keygen -t rsa -C "your_email@example.com" 這將創建 id_rsa 和 id_rsa.pub 文件。

將 id_rsa 添加到本地計算機上的 ssh 列表中: ssh-add ~/.ssh/id_rsa.

生成密鑰后,使用以下命令獲取 pubkey:

cat ~/.ssh/id_rsa.pub 

你會得到類似的東西:

cat ~/.ssh/id_rsa.pub 

ssh-rsa AAAB3NzaC1yc2EAAAADAQABAAACAQCvMzmFEUPvaA1AFEBH6zGIF3N6pVE2SJv9V1MHgEwk4C7xovdk7Lr4LDoqEcqxgeJftwWQWWVrWWf7q9qCdHTAanH2Q5vx5nZjLB+B7saksehVOPWDR/MOSpVcr5bwIjf8dc8u5S8h24uBlguGkX+4lFJ+zwhiuwJlhykMvs5py1gD2hy+hvOs1Y17JPWhVVesGV3tlmtbfVolEiv9KShgkk3Hq56fyl+QmPzX1jya4TIC3k55FTzwRWBd+IpblbrGlrIBS6hvpHQpgUs47nSHLEHTn0Xmn6Q== user@email.com

復制此密鑰(值)並轉到 github.com 並在設置(ssh 和 pgp 密鑰)下添加您的公鑰。

首先,我們需要檢查您計算機上現有的 ssh 密鑰。 打開終端並運行:

ls -al ~/.ssh

#or

cd ~/.ssh
ls

這將列出您的 .ssh 目錄中的文件

最后取決於您所看到的(在我的情況下是):

 github_rsa  github_rsa.pub known_hosts

只需嘗試設置您的 RSA,希望這將解決您的“git push origin”問題

$ ssh-keygen -lf ~/.ssh/github_rsa.pub

注意: RSA 證書是密鑰配對的,因此您將擁有一個私有證書和一個公共證書,您將無法訪問私有證書,因為它屬於 github(在這種情況下),但發生此錯誤時您可能會丟失公共證書(至少這是我的情況,我的 github 帳戶或 repo 不知何故搞砸了,我不得不“鏈接”以前生成的公鑰)

這對我有用:

1-刪除所有來源

git remote rm origin  

(參見https://www.kernel.org/pub/software/scm/git/docs/git-remote.html

*remote :“管理您跟蹤其分支的存儲庫集(“遠程”)。

*rm : "刪除名為 . 的遠程。遠程的所有遠程跟蹤分支和配置設置都被刪除。"

2-檢查所有已被刪除:

git remote -v  

3-添加新的原點主

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

就是這樣!

我收到了這個錯誤。 原來我剛剛將 OSX 升級到 Sierra,我的舊密鑰不再注冊。

起初我以為是“升級到 macOS Sierra 會破壞您的 SSH 密鑰並將您鎖定在自己的服務器之外”

但我回避了那個。 原來我只需要重新注冊我現有的密鑰:

ssh-add -K

然后輸入密碼……完成!

我想我有最好的答案給你,你的 git 應用程序在根用戶目錄中讀取你的 id_rsa.pub

/home/root/.ssh/id_rsa.pub

這就是為什么 git 無法讀取 /home/your_username/.ssh/id_rsa.pub 中的密鑰的原因。 所以你需要在 /home/root/.ssh/ 中創建密鑰

$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub

然后將密鑰復制到您的 github 帳戶中。 它對我有用。 你可以試試。

如果您沒有訪問自己的存儲庫,或者在克隆的存儲庫中進行克隆(使用一些“git submodule...”命令):

在存儲庫的主目錄中:

$ ls -a

1、打開“.gitmodules”,你會發現這樣的東西:

[submodule "XXX"]
    path = XXX
    url = git@github.com:YYY/XXX.git

將最后一行更改為您需要拉取的存儲庫的HTTPS

[submodule "XXX"]
    path = XXX
    https://github.com/YYY/XXX.git

保存 ".gitmodules" ,然后運行子模塊的命令,".git" 將被更新。

2. 打開“.git”,進入“config”文件,你會發現如下內容:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/YYY/XXX.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[submodule "XXX"]
    url = git@github.com:YYY/XXX.git

將最后一行更改為您需要拉取的存儲庫的HTTPS

    url = https://github.com/YYY/XXX.git

因此,在這種情況下,主要問題只是 url。 現在可以在存儲庫頁面頂部找到任何存儲庫的 HTTPS。

確保ssh-add -l顯示 SSH 密鑰的指紋,該指紋出現在您的 Github 帳戶的 SSH 密鑰列表中。

如果輸出為空,但您知道您有一個與您的 github 帳戶一起使用的私有 SSH 密鑰,請在此密鑰上運行ssh-add (在~/.ssh中找到。它默認命名為id_rsa ,因此您可能會運行ssh-add id_rsa - ssh-add id_rsa )。

否則,請按照這些說明生成 SSH 密鑰對。

我之前在我的一個 php 項目中使用了 github。 在使用 github 時,我使用的是 ssh 而不是 https。 我的機器是這樣設置的,每次我提交和推送代碼時,它都會詢問我的 rsa 密鑰密碼。

幾天后,我停止了 php 項目的工作並忘記了我的 rsa 密碼。 最近,我開始從事一個 java 項目並轉移到 bitbucket。 因為,我忘記了密碼並且我想沒有辦法恢復它,所以我決定對新項目使用 https(推薦)協議,並在問題中遇到了同樣的錯誤。

我是怎么解決的?

  1. 運行此命令來告訴我的 git 使用 https 而不是 ssh:

     git config --global url."https://".insteadOf git://
  2. 刪除任何遙控器(如果有)

     git remote rm origin
  3. 重做從git initgit push的所有操作,它就可以工作了!

PS:我還在調試過程中從我的機器上卸載了 ssh,認為刪除它可以解決問題。 是的,我知道!! :)

是的,我也有這個問題:/ 我打算以 HTTP 類型(不是 SSH 類型)將我的項目推送到 Github。 我必須在每次推送中輸入我的用戶名和密碼。 所以首先我輸入了與以下類型相關的代碼

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

我得到了

git@github.com:權限被拒絕(公鑰)。 致命:無法從遠程存儲庫中讀取。

所以我通過以下方法解決了我的問題

  1. git remote rm origin刪除你的 git 遠程倉庫
  2. git remote現在檢查您的遠程遠程存儲庫是否已被刪除

URL = https://github.com/<username>/<repository>.git <用戶名>/<存儲庫>.git

  1. git remote add origin URL再次添加您的 URL 以創建遠程存儲庫
  2. git push -u origin master
    您可以將內容推送到遠程存儲庫。 在這里,當您使用“-u”命令創建一個跟蹤分支並在遠程存儲庫中跟蹤分支的幫助下,您不會告訴 git 您在接下來的步驟中推送哪個分支:)
    在這里,如果你使用 linux git 會在推送內容之前詢問用戶名和密碼。 並提供您的相關憑據。

為了防止在每次推送中提供用戶名和密碼,您必須更改 git config

列出你的 git config - git config --global --list
你會看見

user.name=<your_username>
user.email=<your_email>

因此,您必須將credential.helper屬性添加到您的 git 配置中

5. git config --global --add credential.helper store將此添加到您的終端現在您可以將新項目添加到您的文件中,然后git add. , git commit -m "<message>" , git push
現在 git 也會請求你的用戶名和密碼,這將是最后一次。 對於下一個 git pushes,git 不會向你請求用戶名和密碼 :)

好的,這個解決方案很少,其中一些可能已經被提及,但只是為了將它們放在一起:

  • 確保您的密鑰存在,默認情況下另一個 ~/.ssh/ 文件夾,即 id.rsa 和 id.rsa.pub

  • 確保密鑰具有正確的權限,您可以運行 chmod:

    chmod 600 ~/.ssh/id_rsa

    chmod 644 ~/.ssh/id_rsa.pub

  • 確保您的公鑰 (id_rsa.pub) 的內容與遠程存儲庫配置中上傳的內容相匹配

  • 最后修復 ssh 代理的問題: ssh-add

更多信息: https ://itcodehub.blogspot.com/2015/01/ssh-add-problems-with-ssh-agent-and.html

允許對密鑰(身份)進行寫訪問,然后單擊添加密鑰

在此處輸入圖像描述

如果在 Windows 上,請在通過 SSH 使用 Github中查看更多詳細信息。

解決這樣的錯誤

git@github.com:權限被拒絕(公鑰)。 致命:無法從遠程存儲庫中讀取。 請確保您擁有正確的訪問權限

解決方案 (OSX)

  • 打開您的終端並按照以下命令進行操作

  • $光盤~

  • $須藤蘇

  • $ ssh-keygen

    • 輸入保存密鑰的文件 (/var/root/.ssh/id_rsa): $ id_rsa
    • Enter passphrase (empty for no passphrase): $ hit enter
    • 再次輸入相同的密碼:$回車
  • $ cd ~/.ssh

  • $貓id_rsa.pub

  • 復制顯示內容。 在此處輸入圖像描述

  • 打開 GitHub 單擊您的個人資料圖標設置>SSH 和 GPC 密鑰

  • 單擊新的 ssh 密鑰按鈕在此處輸入圖像描述

  • 輸入您復制的任何標題和密鑰在此處輸入圖像描述

  • 現在檢查您的問題已解決

如果您已經創建了 SSH 密鑰並且仍然收到錯誤,那是因為您需要授予用戶權限來讀取和寫入您要克隆到的文件夾。 為此, sudo chmod 777 <your_folder_name_here>" 。當然,這是在您生成 SSH 密鑰之后,您仍然會收到此錯誤。希望這對未來的用戶有所幫助。

編輯

如果您使用的是 git bash,請在 Windows 中添加到此使用 admin

我想補充一些我的發現:

如果您使用的是GitBash ,請確保 SSH 密鑰存儲在~/.ssh/id_rsa中。

默認情況下, GitBash搜索~/.ssh/id_rsa作為 SSH 密鑰的默認路徑。

甚至文件名id_rsa也很重要。 如果您將 SSH 密鑰保存在另一個文件名或路徑中,它將引發Permission Denied(publickey)錯誤。

我最近有同樣的問題。 如果您需要立即修復,這可能會有所幫助,但每次重新啟動系統時都需要這樣做

從終端運行: ssh-add ~/.ssh/id_rsa

輸入您的系統密碼,這應該可以工作。

TLDR:

  1. 確保您具有對 repo 的write權限(從 repo 的settings配置它)。
  2. 確保公鑰在您的 github 帳戶的SSH and GPG keys中。

對我來說,當我嘗試從新安裝的機器克隆一些 repo 時,通常會發生此錯誤。 github 收到請求時,首先會檢查公鑰哈希。 如果公鑰不匹配任何用戶,github 將拒絕此請求。 如果機器是新機器並且您的 ssh 密鑰是新生成的,這種情況很常見。

您可以使用 Https url 登錄

我猜您在說 git push 時嘗試使用 ssh url 登錄,如果它只詢問密碼,則認為您是通過 ssh 連接的。最好使用 http url。

同樣在 ubuntu 中,即使在 BitBucket 的設置中已經輸入了 SSH 密鑰,我也遇到了這個問題。 原因是,我正在嘗試以下操作:

sudo git push origin master

不知道為什么,但它通過使用解決了

git push origin master

沒有使用 sudo。

對我來說,我試過這個 -

eval "$(ssh-agent -s)"

然后我跑

ssh-add ~/.ssh/path-to-the-keyfile

並生成您可以運行的密鑰

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

這將生成一對密鑰(公共和私人)。

您可以將此密鑰存儲到 github 以獲取更多信息,請閱讀將新的 SSH 密鑰添加到您的 GitHub 帳戶

我希望它會幫助別人:)

我遇到了與@Batman 類似的問題。 但是,因為我在 /usr/local/src/projectname 下運行它,所以不使用 sudo 運行不是一個選項。

只需添加-E 標志來保存環境(您的 ~/.ssh/ 路徑)。

$ sudo -E git clone git@your_repo

從人須藤:

-E, --preserve-env 向安全策略表明用戶希望保留他們現有的環境變量。 如果用戶沒有保護環境的權限,安全策略可能會返回錯誤。

我在遠程主機上使用git pull搜索類似錯誤消息的解決方案時找到了此頁面:

$ git pull
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我通過ssh -AY remote_hostname從本地機器連接到遠程主機。 這不是 OP 問題的解決方案,但對遇到此頁面的其他人很有用,因此在此處發布。

請注意,在我的情況下, git pull在我的本地機器上運行良好(也就是說,已設置 ssh 密鑰並添加到 GitHub 帳戶等)。 我通過將其添加到筆記本電腦上的~/.ssh/config解決了我的問題:

Host *
     ForwardAgent yes

然后我用ssh -AY remote_hostname重新連接到遠程主機,現在git pull可以工作了。 配置中的更改可以將我的 ssh 密鑰對從本地機器轉發到任何主機。 ssh-A選項實際上在該 ssh 會話中轉發它。 在此處查看更多詳細信息。

在此處輸入圖像描述 如果您使用的是 Widows-10,請按照此說明進行操作。 這個對我有用。

  1. 以管理員身份打開終端

  2. 運行這個命令:“ssh-keygen”。 它會生成一個 ssh 密鑰,並將顯示創建它的文件夾。 檢查我的圖像在此處輸入圖像描述

  3. 復制生成的“ssh key”

  4. 轉到您的 github 配置文件 ---> 設置 --> 單擊 SSH 和 GPH --> 單擊““新建 SSH 密鑰按鈕”並粘貼“ssh 密鑰”,最后“單擊添加按鈕”

如果您使用的是 GitHub for Mac UI,請檢查首選項以確保您已登錄。

在“git push”期間我遇到了同樣的錯誤。 在客戶端,我有兩個起源和主人。 我刪除了一個,然后它工作正常。

發生這種情況的一種情況是在創建存儲庫后按照 GitHub 說明進行操作。 Git 將指示您使用類似的東西添加您的遙控器。

git remote add origin git@github.com:<user>/<project>.git

將 <> 中的內容替換為與您的帳戶相關的值。

解決方法是去掉.git后綴。 添加遙控器如下:

git remote add origin git@github.com:<user>/<project>

tl;博士

~/.ssh/config

PubkeyAcceptedKeyTypes=+ssh-dss

場景如果您使用的是 openSSH > 7 的版本,例如在觸控欄 MacBook Pro 上,它是ssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0
ssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0

您還擁有一台舊 Mac,它最初將您的密鑰放在 Github 上,這可能是使用 id_dsa 密鑰。 OpenSSH v7 默認不使用這些 DSA 密鑰(包括這個ssh-dss ),但您仍然可以通過將以下代碼放入您的~/.ssh/config來添加它

PubkeyAcceptedKeyTypes=+ssh-dss

對我有用的來源是這個Gentoo 時事通訊

現在您至少可以使用 GitHub,然后將您的密鑰修復為 RSA。

這對我有用

github 中有2 options - HTTPS/SSH

I had selected SSH ,因此發生了錯誤-_-

將其切換到 HTTPS ,然后再次復制 url 並嘗試 :)

我有同樣的問題,但沒有一個答案有效,但一個簡單的解決方案有效。 但請注意,我確實按照答案的建議添加了ssh key 不確定這是否真的有幫助。 無論如何,這最終奏效了:

使用 git remote set-url 命令將遠程的 URL 從 HTTPS 更改為 SSH。 $ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git 驗證遠程 URL 是否已更改。

我也遇到了這個問題,因為我使用了幾個 GIT 帳戶以及不同的工作和大學帳戶,這對我有用:

-> 轉到您的 ssh 配置

cd ~/.ssh/
vim config

-> 復制以下塊並填寫您要推送到/使用的主機和用戶

Host [Hostname]
User [User]
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa

我遇到了幾個主機名的問題,所以現在我的 ssh 配置文件中有幾個這樣的配置。

也許你的 ssh-agent 沒有啟用你可以試試

  1. 下載 git

http://git-scm.com/

  1. 安裝它

  2. 啟用 ssh 代理

C:\Program Files\Git\cmd

啟動 ssh 代理

轉到您的 GitHub 帳戶儀表板,找到您的項目存儲庫,單擊設置選項卡 - 在部署密鑰下,您必須添加您的 SSH 密鑰。 打開終端並輸入:

cat ~/.ssh/id_rsa.pub | pbcopy 

這將從您的 id_rsa.pub 文件中復制密鑰。 所以只需返回 GitHub 儀表板,粘貼它,單擊Add Key就可以了。

相同的解決方案適用於 Bitbucket 帳戶。

我在 ssh 代理中加​​載了 2 個 Github 身份文件。 我的個人密鑰和另一個用於客戶項目的密鑰。

我刪除了導致混亂的密鑰:

ssh-add -d id_rsa_github_somekey

使用 Https 很好,運行git config --global credential.helper wincred創建一個 Github 憑據助手,為您存儲您的憑據。 如果這不起作用,那么您需要編輯.git目錄中的config文件並將源更新為 https url。

有關 github 文檔,請參閱此鏈接

我對 AWS CodeCommit 也有同樣的問題。 所有人都在一台筆記本電腦上工作,但在另一台筆記本電腦上卻不行。 解決方案是從 AWS 配置部分的 .ssh/config 中刪除“PreferredAuthentications publickey”行。

我試圖用幾個小時來解決類似的問題。 最后,我刪除了所有密鑰並制作了沒有密碼的新密鑰,最終解決了這個問題。

問題出在 SSH 密碼短語上,需要刪除!

以防其他人需要這個。 我在用戶的 .ssh 文件夾中創建了一個名稱不同的 ssh 密鑰,例如ar-2022-ssh 這樣做的問題是檢查現有的 SSH 密鑰指定 GitHub 支持的公共密鑰是以下之一。

id_rsa.pub
id_ecdsa.pub
id_ed25519.pub

一旦我在生成密鑰時將我的 ssh 密鑰名稱更改為其中之一,它就可以連接到 GitHub

設置 SSH 訪問 GitHub 的完整步驟已發布在 ServerFault 上。

檢查@Alex的答案: https://serverfault.com/a/1088209/416091

At 24 Jul 2022, I should set the server and port to ssh.github.com:443 in SSH user config file ( ~/.ssh/config ).

你可以試試這個方法...

在此處輸入圖像描述

在此處輸入圖像描述

選擇另一個鏈接

將 GitHub 添加為遠程時使用此頁面的 URL。 它不會導致任何此類錯誤並推送代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM