有人看到此错误并知道该怎么做吗?
我正在使用终端,我在根目录下,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 密钥。打开终端并运行:
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 不知何故搞砸了,我不得不“链接”以前生成的公钥)
另一个解决方案:
创建 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 密钥)下添加您的公钥。
这对我有用:
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 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
显示您的 Github 帐户的 SSH 密钥列表中存在的 SSH 密钥的指纹。
如果输出为空,但您知道您有一个可与您的 github 帐户一起使用的私有 SSH 密钥,请ssh-add
在此密钥上运行(在 中找到~/.ssh
。它默认命名id_rsa
,因此您可能会运行ssh-add id_rsa
)。
否则,请按照这些说明生成 SSH 密钥对。
我想我有最好的答案给你,你的 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 帐户中。它对我有用。你可以试试。
是的,我也有这个问题:/ 我打算以 HTTP 类型(不是 SSH 类型)将我的项目推送到 Github。我必须在每次推送中输入我的用户名和密码。所以首先我输入了与以下类型相关的代码
git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git
我得到了
git@github.com:权限被拒绝(公钥)。致命:无法从远程存储库中读取。
所以我通过以下方法解决了我的问题
git remote rm origin
删除您的 git 远程存储库git remote
现在检查您的远程远程存储库是否已被删除网址 =
https://github.com/<username>/<repository>.git
git remote add origin URL
再次添加您的 URL 以创建远程存储库git push -u origin master
为了防止在每次推送中提供用户名和密码,您必须更改 git config
列出你的 git 配置 -
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 也会请求您的用户名和密码,这将是最后一次。对于下一个 git pushes,git 不会向你请求用户名和密码 :)git commit -m "<message>"
git push
我之前在我的一个 php 项目中使用了 github。在使用 github 时,我使用的是 ssh 而不是 https。我的机器是这样设置的,每次我提交和推送代码时,它都会询问我的 rsa 密钥密码。
几天后,我停止了 php 项目的工作并忘记了我的 rsa 密码。最近,我开始从事一个 java 项目并转移到 bitbucket。因为,我忘记了密码并且我想没有办法恢复它,所以我决定为新项目使用 https(推荐)协议,并在问题中遇到了同样的错误。
我是怎么解决的?
运行此命令来告诉我的 git 使用 https 而不是 ssh:
git config --global url."https://".insteadOf git://
删除任何遥控器(如果有)
git remote rm origin
重做从git init到git push的所有操作,它就可以工作了!
PS:我还在调试过程中从我的机器上卸载了 ssh,认为删除它可以解决问题。是的,我知道!!:)
好的,这个解决方案很少,其中一些可能已经被提及,但只是为了将它们放在一起:
确保您的密钥存在,默认情况下另一个 ~/.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
如果您已经创建了 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:
write
访问 repo(从 repo 配置它settings
)。SSH and GPG keys
您的 github 帐户中。对我来说,当我尝试从新安装的机器克隆一些 repo 时,通常会发生此错误。github 收到请求时,首先会检查公钥哈希。如果公钥不匹配任何用户,github 将拒绝此请求。如果机器是新机器并且您的 ssh 密钥是新生成的,这种情况很常见。
对我来说,我试过这个 -
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 帐户
我希望它会帮助别人:)
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
同样在 ubuntu 中,即使在 BitBucket 的设置中已经输入了 SSH 密钥,我也遇到了这个问题。原因是,我正在尝试以下操作:
sudo git push origin master
不知道为什么,但它通过使用解决了
git push origin master
没有使用 sudo。
如果您使用的是 GitHub for Mac UI,请检查首选项以确保您已登录。
在“git push”期间我遇到了同样的错误。在客户端,我有两个起源和主人。我删除了一个,然后它工作正常。
tl;博士
~/.ssh/config
总而言之_
PubkeyAcceptedKeyTypes=+ssh-dss
场景
如果您使用的是 openSSH > 7 的版本,例如在触控栏 MacBook Pro 上,它是ssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0
您还拥有一台旧 Mac,它最初将您的密钥放在 Github 上,这可能是使用 id_dsa 密钥。默认情况下,OpenSSH v7 不使用这些 DSA 密钥(包括 this ssh-dss
),但是您仍然可以通过将以下代码放入您的~/.ssh/config
PubkeyAcceptedKeyTypes=+ssh-dss
对我有用的来源是这个Gentoo 时事通讯
现在您至少可以使用 GitHub,然后将您的密钥修复为 RSA。
您可以使用 Https url 登录
我猜您在说 git push 时尝试使用 ssh url 登录,如果它只询问密码,则认为您是通过 ssh 连接的。最好使用 http url。
我遇到了与@Batman 类似的问题。但是,因为我在 /usr/local/src/projectname 下运行它,所以不使用 sudo 运行不是一个选项。
只需添加-E 标志来保存环境(您的 ~/.ssh/ 路径)。
$ sudo -E git clone git@your_repo
从人须藤:
-E, --preserve-env 向安全策略指示用户希望保留他们现有的环境变量。如果用户没有保护环境的权限,安全策略可能会返回错误。
发生这种情况的一种情况是在创建存储库后按照 GitHub 说明进行操作。Git 将指示您使用类似的东西添加您的遥控器。
git remote add origin git@github.com:<user>/<project>.git
将 <> 中的内容替换为与您的帐户相关的值。
解决办法是去掉.git
后缀。添加遥控器如下:
git remote add origin git@github.com:<user>/<project>
git@github.com:权限被拒绝(公钥)。致命:无法从远程存储库中读取。请确保您拥有正确的访问权限
这对我有用
2 options
github上有——HTTPS/SSH
I had selected SSH
错误导致错误发生-_-
将其切换到 HTTPS,然后再次复制 url 并尝试 :)
也许你的 ssh-agent 没有启用你可以试试
安装它
启用 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
我试图用几个小时来解决类似的问题。最后,我删除了所有密钥并制作了没有密码的新密钥,最终解决了这个问题。
问题出在 SSH 密码短语上,需要删除!
我有同样的问题,但没有一个答案有效,但一个简单的解决方案有效。但请注意,我确实ssh key
按照答案的建议添加了。不确定这是否真的有帮助。无论如何,这最终奏效了:
使用 git remote set-url 命令将远程的 URL 从 HTTPS 更改为 SSH。$ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
. 验证远程 URL 是否已更改。
使用 Https 很好,运行git config --global credential.helper wincred
创建一个 Github 凭证助手,为您存储您的凭证。如果这不起作用,那么您需要编辑目录config
中的文件.git
并将源更新为 https url。
有关 github 文档,请参阅此链接。
我对 AWS CodeCommit 也有同样的问题。所有人都在一台笔记本电脑上工作,但在另一台笔记本电脑上却不行。解决方案是从 AWS 配置部分的 .ssh/config 中删除“PreferredAuthentications publickey”行。
将 GitHub 添加为远程时使用此页面的 URL。它不会导致任何此类错误并推送代码