Git Bash 和 Pageant 没有使用密钥
Posted
技术标签:
【中文标题】Git Bash 和 Pageant 没有使用密钥【英文标题】:Git Bash and Pageant are not using keys 【发布时间】:2016-05-08 16:43:31 【问题描述】:我已经安装了适用于 Windows 的 Git(针对 MinTTY 和 PuTTY\plink.exe
进行了配置)和 PuTTY,并且我正在尝试让它与 Bitbucket 存储库一起使用。我已经在 Pageant 和网站上加载了我的 SSH 密钥,但每当我尝试做任何需要拉/推的事情时:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
当我运行建议的ssh -v hg@bitbucket.org
时,它使用id_rsa
,但~/.ssh
中没有我的其他键。尝试使用 ssh-add ~/.ssh/bitbucket_rsa
会导致:
Could not open a connection to your authentication agent.
我已经阅读了有关配置 PuTTY 以允许转发的信息,但这通常是建议结束的地方,所以我只是将此选项设置为默认会话并将其保存在那里。
我已经运行ps
来检查哪些应用程序正在运行,而ssh-agent
不在其中。运行eval 'ssh-agent'
会启动守护进程,但没有任何区别。
【问题讨论】:
这里有一个很好的解决方法:cgranade.com/blog/2016/06/06/ssh-keys-in-vscode.html 【参考方案1】:确保您已使用 ssh url 而非 http url 克隆了您的存储库
要检查,请使用git origin --remote -v
如果远程 url 是像下面这样的 http url
origin https://username@example.com/username/repo.git
使用git remote set-url origin
命令更改远程url,例如:
git remote set-url origin git@example.com:username/repo.git
【讨论】:
【参考方案2】:对于未来的谷歌员工,
就像 @CTS_AE 所说的那样做,或者你可以在提升的 powershell 中运行它
[Environment]::SetEnvironmentVariable("GIT_SSH", "C:\Program Files\PuTTY\plink.exe", "Machine")
【讨论】:
【参考方案3】:这就是最终对我有用的东西。
顺便说一句,我在 Windows 上也有 Bash,但我认为这并不重要。
我安装了 Sourcetree,并用 plink.exe
、puttygen.exe
和 pageant.exe
指向它的文件夹。您也可以单独下载并安装它们。
配置 Windows 环境变量
-
在 Windows 10 搜索栏中键入
Environment
。否则,打开系统属性/高级系统设置并找到您的环境变量。
添加新的系统变量
变量名称:GIT_SSH
变量值:plink.exe
文件的完整路径(您可能在同一文件夹中也有 pageant.exe
和 puttygen.exe
)。
我的是:C:\Program Files (x86)\Atlassian\SourceTree\tools\putty\plink.exe
注意:较新版本的 Sourcetree 似乎安装了 %localappdata%
。这些工具位于%localappdata%\SourceTree\app-x.x.x\tools\putty
注意:较新的 Sourcetree(Windows 上的 v2)使用版本化目录,因此每次更新它时,您都必须更新它,这很痛苦。最好只复制plink.exe
并将其放在不会更改的地方。
如果您有上述任何程序在运行,您可以随时打开任务管理器,找到进程,然后打开文件夹位置以获取plink.exe
的路径。
利润
确保重新启动您的终端,以便它们获得更新的环境变量。对我来说,我在Visual Studio Code 中为我的集成终端运行 Bash,所以我不得不重新启动 Visual Studio Code。关闭集成终端并打开一个新终端肯定是可以接受的,但我也希望 Visual Studio Code 中内置的 git 功能也能正常工作。
注意
鉴于我安装了 Sourcetree,我能够使用它的界面从 Bitbucket 中克隆出来并通过其界面推送,但尝试通过终端无法正常工作,因为它们使用了不同的凭据集。
要指出的另一个有趣的事情是,如果您导航到位于./.git/config
的项目的 git 配置,您可以将远程从使用 SSH 换成 HTTPS。您可以从您的 Bitbucket 存储库中的 Overview 中获取以下值。
git@bitbucket.org:USERNAME/REPO_NAME.git
https 布局:https://USERNAME@bitbucket.org/USERNAME/REPO_NAME.git
我注意到在 Windows 10 上使用 HTTPS 时,它会使用 Windows 凭据管理器(我尝试将我的凭据添加到它,同时我自己也想弄清楚,但我仍在使用 SSH,所以没关系)当你去与远程存储库进行交互,它会提示您输入您的凭据并将它们存储起来以供以后在 Windows 凭据管理器中使用:)
希望其中一种方法对您有用。 HTTPS 方法将跳过整个 SSH 密钥生成并将其推送到 Bitbucket,但对我来说感觉更安全和便携。
Mac 操作系统
您可能需要将您的密钥添加到钥匙串中,尤其是当您使用 Visual Studio Code 并且密钥上有密码时(目前 Visual Studio Code 不允许您输入密码)。
ssh-add -K ~/.ssh/id_rsa
https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/#adding-your-ssh-key-to-the-ssh-agent
补充
我不确定这些是否对某人有帮助,但我一直在关注 Visual Studio Code for Windows 的 SSH 支持:https://github.com/Microsoft/vscode/issues/13680。
https://github.com/PowerShell/openssh-portable https://github.com/rupor-github/ssh-agent-wsl【讨论】:
关于 VSCode 的评论。显然我已经尝试在 VSCode 中使用 Power Shell 并且设置不起作用没有重新启动 VSCode。我在添加GIT_SSH
之前启动了终端一次,然后按下Kill Terminal
并创建一个新实例。 npm install
仅在 VSCode 重启后才识别 ssh 密钥。
设置 GIT_SSH 后,您可以通过运行$GIT_SSH -v git@github.com
进行测试。最后,您应该会收到一条友好的消息:“Hi 3.0.17
更新到 3.1.2
并且它实际上仍然有效,而无需我更新路径。不知道为什么?
@MTran 如帖子中所述,您可以复制它们或下载它们并将它们放在不会更改的目录中。它们不必在那个目录中,它们恰好包含在 Sourcetree 中。【参考方案4】:
Windows 7 的 Git Bash 对我有用:将 .pkk 文件转换为 OpenSSH 格式:
https://www.simplified.guide/putty/convert-ppk-to-ssh-key
在 Git Bash 中将生成的密钥添加到 IdentityFile .ssh/config
,例如:
Host repository
# My converted OpenSSH key
IdentityFile /c/Users/me/open-ssh.pri
# This repository server uses a specific name, not usually needed.
User git
# This repository server uses a specific port, not usually needed
Port 8322
# Repository server full name
Hostname repo.server.com
【讨论】:
【参考方案5】:要从 Windows 上的 Git 附带的 Git Bash 访问在 Pegeant 中加载的 SSH 密钥,您可以使用 this program。安装过程在链接页面上进行了描述。
【讨论】:
【参考方案6】:你把事情搞混了。
PuTTY 和 Pageant 与 OpenSSH 工具不兼容,无法一起通信。 PuTTY 无法从您的 OpenSSH 代理读取密钥,OpenSSH 无法从 Pageant 读取密钥。密钥格式也不同。这在这个世界上是一件坏事,但目前还没有解决方案。
“代理转发”也不同于“使用代理”。
如果您使用 plink 设置 Git(确保您确实这样做了),请检查您的 Pageant 是否正在运行,以及是否在 PuTTY 中存储的配置文件中的 Connection下检查了“尝试使用 Pageant 进行身份验证”选项> → SSH → 验证。
如果它不能解决您的问题,请从 PuTTY 发布一些调试日志。
【讨论】:
我只尝试运行这些命令,因为似乎没有其他任何工作。恐怕我仍然不明白我应该在什么地方更改 PuTTY 中的这些设置。我应该创建一个专门为 bitbucket.org 配置的 PuTTY 会话吗? 你可以使用现有的。 我不确定发生了什么变化,因为我在所有连接上都设置了这个,但它不起作用。我打开了允许更改用户名的选项,它似乎有效(应该没关系,因为它应该与密钥本身匹配?),然后我禁用它,它仍然有效。 这就是我的答案。 here 是不同的、不兼容的密钥格式的示例。 事实证明,在我的 MINGW64 终端中使用ssh-keygen
非常简单(至少比在 PuTTy 工具中四处点击要容易得多)。【参考方案7】:
您不需要 PuTTY 在 ssh 中使用 Bitbucket:打包在 git-for-windows 中的 OpenSSH 版本 (C:\prgs\git\PortableGit-2.7.0-64-bit\usr\bin\ssh.exe
) 可以正常工作。
确保在当前的 shell 会话中,将 HOME 设置为 %USERPROFILE%
(PortableGit-2.7.0-64-bit\git-cmd.exe
足以打开正确配置的常规 CMD)。
在%USERPROFILE%\.ssh
中创建一个名为config
的文件(如step 3 of the Atlassian documentation):
Host bitbucket.org
IdentityFile ~/.ssh/bitbucket_rsa
(您也可以使用“/C/path/to/bitbucket_rsa
”。)
这允许使用像bitbucket.org:user/repo
这样的SSH URL。
使用ssh -Tv bitbucket.org
对其进行测试(当然,在将您的公钥添加到您的 Bitbucket 帐户之后)。
注意:ssh-agent
仅在您的私钥受密码保护时才需要。
2018 年更新,两年后:“Say Farewell to PuTTY as Microsoft adds an OpenSSH Client to Windows 10”。 是时候放弃 putty 了:不需要不同的 (ppk) 密钥格式和 proprietary solution,现在 OpenSSH 已作为 Windows 功能正式分发(目前处于测试阶段,2018 年第一季度)。
【讨论】:
我知道我可以使用 OpenSSH。我不想。 @DissidentRage 然而,这就是 git 打包的东西,它工作得很好。 它应该适用于 PuTTY。我的工作机器可以正常工作,没有任何大惊小怪。如果一个答案不能使这个工作,它不会被标记为一个解决方案。 @DissidentRage 您是否已将 GIT_SSH 设置为 putty?您是否使用腻子将您的 openssh 密钥转换为 ppk 密钥,腻子实际上可以读取? (siteground.com/tutorials/ssh/putty.htm) 它是为 PuTTY\plink.exe 配置的,是的,Pageant 设置为使用自己的 .ppk 文件。以上是关于Git Bash 和 Pageant 没有使用密钥的主要内容,如果未能解决你的问题,请参考以下文章