我在 Mac Snow Leopard 上,并且刚刚安装了 git
。
我刚试过
git clone git@thechaw.com:cakebook.git
但这给了我这个错误:
Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
我错过了什么?
我也尝试过没有密码但仍然出现相同错误的 ssh-keygen
。
sudo
克隆 - 这是另一个具有另一个公钥的用户。
ssh-keygen
实用程序生成了另一个密钥对。删除 github 上个人设置中的旧公钥并将我的 ssh 生成的 id_rsa.pub 密钥添加到 SSH 和 GPG 密钥修复了克隆权限问题。
如果用户之前没有生成 ssh 公钥/私钥对
此信息正在 TheChaw 上运行,但可以应用于支持 SSH 公钥身份验证的所有其他 git 存储库。 (例如,参见 [gitolite][1]、gitlab 或 github。)
首先设置您自己的公钥/私钥对集。这可以使用 DSA 或 RSA,因此基本上您设置的任何密钥都可以使用。在大多数系统上,您可以使用 ssh-keygen。
首先,您需要 cd 进入您的 .ssh 目录。打开终端并运行: cd ~/.ssh && ssh-keygen 接下来,您需要将其复制到剪贴板。在 OS X 上运行:cat id_rsa.pub | pbcopy 在 Linux 上运行:cat id_rsa.pub | xclip 在 Windows 上(通过 Cygwin/Git Bash)运行:cat id_rsa.pub |在 Windows (Powershell) 上运行:Get-Content id_rsa.pub | Set-Clipboard (Thx to @orion elenzil) 通过网站将您的密钥添加到您的帐户。最后设置你的 .gitconfig。 git config --global user.name "bob" git config --global user.email bob@... (不要忘记重新启动命令行以确保重新加载配置)就是这样你应该很好克隆和结帐。
如需更多信息,请访问 https://help.github.com/articles/generating-ssh-keys(感谢 @Lee Whitney)[1]:https://github.com/sitaramc/gitolite
-
如果用户之前已经生成了一个 ssh 公钥/私钥对
检查您的 github 或 gitlab 帐户设置上已授权哪个密钥
确定必须从本地计算机关联哪个对应的私钥
eval $(ssh-agent -s)
定义键的位置
ssh-add ~/.ssh/id_rsa
更广泛的故障排除甚至自动修复可以通过以下方式完成:
ssh -vT git@github.com
或者,根据以下评论,我们可以发出:
ssh -vT git@gitlab.com
或者用您的组织正在运行的任何 Git 实例替换 gitlab/github。
来源:https://help.github.com/articles/error-permission-denied-publickey/
当您访问 SSH URL(读/写)而不是 Git 只读 URL 但您没有对该存储库的写访问权时,可能会发生此错误。
有时您只想克隆自己的存储库,例如部署到服务器。在这种情况下,您实际上只需要只读访问权限。但由于这是您自己的存储库,如果您愿意,GitHub 可能会显示 SSH URL。在这种情况下,如果您的远程主机的公钥不在您的 GitHub SSH 密钥中,您的访问将被拒绝,这是预期的情况。
一个等效的情况是,当您尝试使用 SSH URL 克隆您没有写入权限的其他人的存储库时。
总之,如果您的意图是仅克隆一个存储库,请使用 HTTPS URL (https://github.com/{user_name}/{project_name}.git
) 而不是 SSH URL (git@github.com:{user_name}/{project_name}.git
),这样可以避免(不必要的)公钥验证。
更新:GitHub 现在将 HTTPS 显示为默认协议,这一举措可能会减少 SSH URL 的可能滥用。
https://github.com
git url,它仍然显示 SSL certificate problem: self signed certificate in certificate chain
。 git -c http.sslVerify=false clone ...
似乎是一个危险的举动。不过,Chrome 并没有给出任何 ssl 警告。想法?
git clone https://github.com/MyUserName/MyRepo.git
只需单击 Github 页面右侧的存储库 URL 下方的文本链接,其中显示“您可以使用HTTPS、SSH 或 Subversion。”。 (单击 HTTPS 获取链接,而不是默认的 SSH。)
github 帮助 link 帮助我解决了这个问题。看起来 ssh 密钥未添加到 ssh-agent。这就是我最终做的。
命令 1:
确保已启用 ssh-agent。该命令在后台启动 ssh-agent:
eval "$(ssh-agent -s)"
命令 2:
将 SSH 密钥添加到 ssh-agent:
ssh-add ~/.ssh/id_rsa
得到相同的错误报告。
修复了使用 HTTPS 而不是 SSH 协议的问题。因为我不想为测试 PC 设置“SSH 密钥”。
克隆时将 URL 更改为 HTTPS:
git clone https://github.com/USERNAME/REPOSITORY.git
我的问题有点不同:在将现有本地存储库添加到远程时,我将 URL 设置为 SSH,方法是:
git remote add origin ssh://github.com/USERNAME/REPOSITORY.git
要修复它,请将 URL 重置为 HTTPS:
git remote set-url origin https://github.com/USERNAME/REPOSITORY.git
顺便说一句,您可以使用以下命令检查您的 URL:
git remote -v
origin https://github.com/USERNAME/REPOSITORY.git (fetch)
origin https://github.com/USERNAME/REPOSITORY.git (push)
希望这会帮助像我这样的人。 :D
Windows 上的另一种可能性,这些答案中的任何一个都没有涵盖,并且 git 或 github 文档中没有涵盖故障排除:
git 使用的 openssh 可执行文件可能与您想象的不同。
我在尝试从 github 和 ssh.dev.azure.com 克隆或拉取时收到 Permission denied (public key)
错误,我已按照所有说明操作并验证了我的 SSH 密钥已正确设置(从 SSH 的角度来看)使用 {2 } 和 ssh -vT git@ssh.dev.azure.com
。并且仍然收到这些错误:
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我最终发现问题在于 Git for Windows 和 Windows 都有自己的 openssh 版本。这在此处记录:https://github.com/desktop/desktop/issues/5641
我依靠 Windows ssh-agent 服务来存储我的 ssh 密钥密码,所以 git(带有单独版本的 openssh)无法读取我的私钥。我认为使用此错误消息是一个错误 - 它具有误导性。
解决方法是:
git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'"
或者在你的 ~/.gitconfig 中:
[core]
sshCommand = 'C:\\Windows\\System32\\OpenSSH\\ssh.exe'
也许这很快会在 git for Windows 中得到修复,但这是我第二次在这个问题上浪费时间。
git pull
我会收到“Permission Denied (publickey)”。但是,在其他 Visual Studio 解决方案(我的项目)上,我不会有任何问题......这个解决方案是有道理的,这个问题是如何产生于我的一个项目的仍然有点神秘。
~/.gitconfig
,则可以修改 C:\Program Files\Git\etc\gitconfig
。
我正在努力解决与我所做的相同的问题,并且我能够克隆存储库。我在 Mac 上遵循了这个程序。
第一步:检查我们是否已经拥有公共 SSH 密钥。
打开终端。输入 ls -al ~/.ssh 以查看是否存在现有的 SSH 密钥:
检查目录列表以查看您是否已经拥有公共 SSH 密钥。默认公共是以下 d_dsa.pub、id_ecdsa.pub、id_ed25519.pub、id_rsa.pub 之一。
如果找不到,请转到第 2 步,否则请按照第 3 步
第 2 步:生成公共 SSH 密钥
打开终端。使用您用于 github 的有效电子邮件地址输入以下命令 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 您将在终端中看到以下内容 生成公钥/私钥 rsa 密钥对。当提示“输入要保存密钥的文件”时,按 Enter。这接受默认文件位置。当它提示输入保存密钥的文件(/Users/you/.ssh/id_rsa)时: [按回车] 再次按回车。在提示“键入安全密码。输入密码(没有密码时为空):[输入密码]”如果您不想再次输入相同的密码,请按回车:[再次输入密码]再次按回车
这将生成 id_rsa.pub
第 3 步:将 SSH 密钥添加到 ssh-agent
在终端输入 eval "$(ssh-agent -s)" 将 SSH 密钥添加到 ssh-agent。如果您使用现有的 SSH 密钥而不是生成新的 SSH 密钥,则需要将命令中的 id_rsa 替换为现有私钥文件的名称。输入此命令 $ ssh-add -K ~/.ssh/id_rsa 现在复制 SSH 密钥并将其添加到您的 github 帐户中 在终端输入此命令,并使用您的 ssh 文件名 pbcopy < ~/.ssh/id_rsa.pub 这将将文件复制到剪贴板现在打开您的 github 帐户转到设置 > SSH 和 GPG 密钥 > 新 SSH 密钥 输入标题并从剪贴板粘贴密钥并保存。瞧,你完成了。
这对我有用:
ssh-add ~/.ssh/id_rsa
视觉指南(Windows)
1 of 2. Git 批处理端
https://i.stack.imgur.com/gcibV.png
1.2.粘贴下面的文本(更改为您的 GitHub 帐户电子邮件)
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
https://i.stack.imgur.com/PmaB0.png
https://i.stack.imgur.com/SrJtp.png
1.4. 点击 Enter 两次(或设置 SSH 密钥密码 - Gitbub passphrases docs)
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
1.5。密钥生成:
您的身份已保存在 /c/Users/user/.ssh/id_rsa...
1.6.将 SSH 密钥复制到剪贴板。
$ clip < ~/.ssh/id_rsa.pub
2 of 2. Github 网站用户端
https://i.stack.imgur.com/1XG4T.png
https://i.stack.imgur.com/am12C.png
https://i.stack.imgur.com/8QQtz.png
完毕 :)
https://i.stack.imgur.com/uXfJa.png
如果有人不想使用 SSH use HTTPS
:
https://i.stack.imgur.com/aQ1kH.png
Github 文档: https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
请注意(至少对于某些项目),您必须拥有一个带有 ssh 密钥的 github 帐户。
查看您的身份验证代理中列出的密钥 (ssh-add -l)
(如果您没有看到任何密钥,请使用 ssh-add /path/to/ 添加现有密钥之一your/key(例如:ssh-add ~/.ssh/id_rsa))
(如果您没有任何密钥,请先创建一个。请参阅:http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html 或只是 google ssh -密钥生成器)
要验证您是否拥有与您的 github 帐户关联的密钥:
转到:https://github.com/settings/ssh
您应该看到至少一个键的哈希键与您在一分钟前键入 ssh-add -l 时看到的哈希键相匹配。
如果没有,请添加一个,然后重试。
git@github.company.com
而不是 https://github.company.com
)但您的 Github 设置没有 SSH 密钥,您就会知道您遇到了这个问题。 Github 在 docs.github.com/en/github/authenticating-to-github/… 提供分步说明。
如果您的问题最近(2021 年下半年)突然出现,则可能是由不兼容的哈希算法引起的。
截至这篇文章(2021 年 10 月),适用于 windows 的 Git 的最新版本是 2.33.1 (release note),它采用了最新的 OpenSSH 8.8p1 (release note),反过来又弃用了 SHA- 1。同时,如果您的远程 Git 存储库仍然坚持使用 SHA-1,您将无法通过身份验证。
要查看您是否可能陷入这种情况,请通过以下方式检查您的软件版本:
ssh -V
git --version
然后您应该检查 OpenSSH 8.8/8.8p release note 的“可能不兼容的更改”部分。
TL;博士
解决方案 1: 通过将其添加到您的 ~/.ssh/config
文件再次启用 SHA-1:
Host <remote>
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
请记住将 <remote>
替换为远程存储库的主机名。
解决方案 2:使用 ECDSA 或 Ed25519 而不是 RSA 重新生成您的密钥对。例如:
ssh-keygen -t ecdsa -C <comment>
请记住将 <comment>
替换为您自己的助记词。然后,将生成的公钥上传到您的远程存储库。
仅供参考,我在访问 Gitee.com 时遇到此提示消息,该网站在其服务器上使用 golang.org/x/crypto/ssh
并已发布有关此问题的页面 here(普通话)。
git@gitee.com: Permission denied (publickey).
我遇到了同样的问题,因为我认为 SSH 和 HTTPS 之间的区别是
https://github.com/USERNAME/REPOSITORY.git
ssh://github.com/USERNAME/REPOSITORY.git
所以我从 HTTPS 更改为 SSH 只需将 https://
更改为 ssh://
网址末尾的任何内容都没有更改。
但事实是:
https://github.com/USERNAME/REPOSITORY.git
git@github.com:USERNAME/REPOSITORY.git
这意味着我将 ssh://github.com/USERNAME/REPOSITORY.git
更改为 git@github.com:USERNAME/REPOSITORY.git
它有效。
愚蠢的错误,但希望对某人有所帮助!
ssh://github.com/USERNAME/REPOSITORY.git
更改为 git@github.com:USERNAME/REPOSITORY.git
它有效。
ssh
而不是 https
,所以我只是将 'https://' 更改为 'ssh://`,然后我得到了错误。所以将 'ssh://git/../` 更改为 'git@../" :) 编辑了我的答案。
这些是我在 Windows 10 中遵循的步骤
打开 Git Bash。生成公钥: ssh-keygen -t rsa -b 4096 -C "youremailaddress@xyz.com" 将生成的密钥复制到剪贴板(类似 CTRL+C) clip < ~/.ssh/id_rsa.pub 浏览器,转到 Github => 配置文件=> 设置 => SSH 和 GPG 密钥 => 添加密钥 提供密钥名称并粘贴剪贴板 (CTRL+V)。最后,测试你的连接(Git bash) ssh -T git@github.com
https://i.stack.imgur.com/dpYYk.png
谢谢!
我的情况略有不同,我登录到远程服务器并在服务器上使用 git,当我运行任何 git 命令时,我得到了相同的消息
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
我修复它的方法是在我的 Mac 上更改文件 /etc/ssh_config。从
ForwardAgent no
至
ForwardAgent yes
config.ssh.forward_agent = true
,重新启动 VM,现在它可以工作了。
如果没有解决,请试试这个
生成个人访问令牌(设置 -> 开发人员设置 -> 个人访问令牌 -> 生成新令牌) git remote set-url origin https://
注意:如果出现密码弹出窗口,请尝试仅输入令牌(尝试两次)
我不得不将我的 ssh 密钥复制到根文件夹。运行 Ubuntu 18.04 的谷歌云计算引擎
sudo cp ~/.ssh/* /root/.ssh/
使用 gh
即 Github's official CLI 的解决方案
gh安装
brew install gh
gh 通过 cli 登录或身份验证
gh auth login
回购克隆
gh repo clone <username or orgname>/<repo-name>
示例:gh repo clone keshavdulal/sample-repo
咆哮:当 git clone
突然决定不再工作并且我没有耐心或脑力从头开始重新学习 ssh/公钥/密码学只是为了克隆我已经拥有的该死的 repo 时,我也很生气进入。也很惊讶没有人在答案中提到 gh
伙计们,这对我来说是这样的:
打开终端并转到用户 [参见附图] 打开 .ssh 文件夹并确保它没有任何文件,如 id_rsa 或 id_rsa.pub 否则有时它不会正确重写文件 git --version [检查 git 安装和版本] git config --global user.email "your email id" git config --global user.name "your name" git config --list [确保您已设置您的姓名和电子邮件] cd ~/.ssh ssh-keygen,它提示保存文件,允许它 cat ~/.ssh/id_rsa.pub [访问您的公钥并将密钥复制到 gerrit 设置]
注意:您不应该在 Git 中使用 sudo 命令。如果您有充分的理由必须使用 sudo,那么请确保您在每个命令中都使用它(此时使用 su 以 root 身份获取 shell 可能会更好)。如果您在没有 sudo 的情况下生成 SSH 密钥,然后尝试使用类似 sudo git push 的命令,您将不会使用生成的相同密钥
https://i.stack.imgur.com/ZVElb.png
https://i.stack.imgur.com/eO8bK.png
在 Windows 上,确保您的所有应用都同意 HOME。 Msys 出人意料地不会为你做这件事。我不得不设置一个环境变量,因为 ssh 和 git 似乎无法就我的 .ssh 目录的位置达成一致。
您在 corporate environment 中吗?您的系统变量最近是否可能发生了变化?根据 this SO answer,ssh 密钥位于 %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub
。因此,如果 %HOMEDRIVE%
最近发生了变化,git 不知道在哪里查找您的密钥,因此也不知道所有的身份验证内容。
尝试运行 ssh -vT git@github.com
。记下 identity file
的位置。对我来说,这 不是 指向我的正常 \Users\MyLogin
,而是指向网络驱动器,因为在网络级别推送了对环境变量的更改。
解决方案?因为我的新 %HOMEDRIVE%
与我的本地文件具有相同的权限,所以我只是将我的 .ssh 文件夹移到那里,然后就结束了。
最简单的方法之一
去终端-
git push <Git Remote path> --all
我遇到了这个错误,因为我需要给我当前的工作目录权限 700:
chmod -R 700 /home/ec2-user/
始终检查 GitHub 上的 SSH 密钥生成过程,而不是一些过时的博客
在那里您可以看到密钥是通过以下方式生成的:
ssh-keygen -t ed25519 -C "your_email@example.com"
所以算法是 ed25519 而不是 rsa 或其他任何东西。
基本的 GIT 指令没有提到 SSH 密钥的东西。在上面的一些链接之后,我找到了一个 git 帮助页面,它逐步解释了如何为各种操作系统执行此操作(该链接将检测您的操作系统并相应地重定向):
http://help.github.com/set-up-git-redirect/
它介绍了 GITHub 所需的所有内容,并提供了详细的解释,例如“为什么在创建 RSA 密钥时添加密码短语”。我想我会发布它,以防它帮助别人......
当您尝试使用不同的用户名推送到存储库时,最简单的解决方案是:
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git
除了 Rufinus 的回复之外,在 Windows 中将 ssh 密钥复制到剪贴板的快捷方式是:
类型 id_rsa.pub |夹子
参考:
打印到标准输出
将命令行输出复制到剪贴板
如果您有多个密钥,您可能需要执行 ssh-add private-keyfile
它非常简单。键入以下命令
ssh-keygen -t rsa -b 4096 -C "youremailid@yourdomain.com"
生成 SSH 密钥。打开文件并复制内容。进入 GitHub 设置页面,点击 SSH 密钥。单击添加新的 SSH 密钥,然后将内容粘贴到此处。就是这样:) 你不应该再看到这个问题了。
我帮助了以下内容:
打开终端(Git Bash)删除目录 .ssh 中的所有文件或重命名并创建新的 .ssh 文件夹。按照说明的步骤进行操作: 生成新的 SSH 密钥 将 SSH 密钥添加到 ssh-agent
系统:Windows 10。
我删除了 node_modules/package-lock.json 和 yarn.lock 文件。再次运行npm i
。这为我解决了这个问题。
不定期副业成功案例分享
ssh-add ~/.ssh/id_rsa
。xclip
进行复制只能通过执行此处列出的以下xclip -sel clip < ~/.ssh/id_rsa.pub
来工作:help.github.com/articles/generating-ssh-keyscat id_rsa.pub | Set-Clipboard
,或者更强大的是Get-Content id_rsa.pub | Set-Clipboard
。