繁体   English   中英

Git Bash 和 Pageant 不使用密钥

[英]Git Bash and Pageant are not using keys

我已经安装了适用于 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'启动守护进程,但没有任何区别。

这就是最终为我工作的原因。

顺便说一句,我在 Windows 上也有 Bash,但我认为这并不重要。

我安装了 Sourcetree 并用plink.exeputtygen.exepageant.exe指向它的文件夹。 您也可以单独下载和安装这些。

配置 Windows 环境变量

  1. 键入Environment到Windows 10的搜索栏。 否则,打开系统属性/高级系统设置并找到您的环境变量。
  2. 添加新的系统变量
    • 变量名称:GIT_SSH
    • 变量值plink.exe文件的完整路径(您可能还有pageant.exeputtygen.exe在同一文件夹中)。
      • 我的是: C:\\Program Files (x86)\\Atlassian\\SourceTree\\tools\\putty\\plink.exe

      • 注意:较新版本的 Sourcetree 似乎安装了%localappdata% 工具位于%localappdata%\\SourceTree\\app-xxx\\tools\\putty

      • 注意:较新的 Sourcetree(Windows 上的 v2)使用版本化目录,因此每次更新它时,您都必须更新它,这很痛苦。 最好只复制plink.exe并将其放在不会更改的地方。

      • 如果您正在运行上述任何程序,您可以随时打开任务管理器,找到进程,然后打开文件夹位置以获取plink.exe的路径。

利润

确保重新启动终端,以便它们获得更新的环境变量。 对我来说,我在Visual Studio Code 中为我的集成终端运行 Bash,所以我不得不重新启动 Visual Studio Code。 关闭集成终端并打开一个新终端肯定是可以接受的,但我也希望 Visual Studio Code 中的内置 git 功能也能正常工作。

笔记

鉴于我安装了 Sourcetree,我能够使用它的界面克隆出 Bitbucket 并推送它的界面,但是尝试通过终端不起作用,因为它们使用的是不同的凭据集。

另一个需要指出的有趣的事情是,如果您导航到位于以下位置的项目的 git 配置: ./.git/config ,您可以将您的遥控器从使用 SSH 换成 HTTPS。 您可以从 Bitbucket 存储库的概览中获取以下值。

  • ssh 布局: 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,但对我来说感觉更安全和便携。

苹果系统

您可能需要将您的密钥添加到钥匙串中,特别是如果您使用的是 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 -代理人

添加

我不确定这些是否对某人有帮助,但我一直在关注将 SSH 支持纳入 Visual Studio Code for Windows: https : //github.com/Microsoft/vscode/issues/13680

你把事情搞混了。

PuTTY 和 Pageant 与 OpenSSH 工具不兼容,无法一起通信。 PuTTY 无法从 OpenSSH 代理读取密钥,OpenSSH 无法从 Pageant 读取密钥。 密钥格式也不同。 这在这个世界上是件坏事,但在地平线上没有解决方案。

“代理转发”也不同于“使用代理”。

如果您使用 plink 设置 Git(确保您确实设置了),请检查您的 Pageant 是否正在运行,以及是否在连接SSHAuth下的 PuTTY 中存储的配置文件中选中了“尝试使用 Pageant 进行身份验证”选项。

如果它不能解决您的问题,请从 PuTTY 发布一些调试日志。

你不需要 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的文件(如Atlassian 文档的第 3 步):

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 年更新:“ 告别 PuTTY,因为 Microsoft 向 Windows 10 添加了 OpenSSH 客户端”。 现在是抛弃腻子的时候了:现在不需要不同的 (ppk) 密钥格式和专有解决方案,现在OpenSSH作为 Windows 功能正式分发(目前处于测试阶段,2018 年第一季度)。

要从 Windows 上的 Git 附带的 Git Bash 访问 Pegeant 中加载的 SSH 密钥,您可以使用此程序 链接页面上描述了安装过程。

Windows 7 的 Git Bash 对我有用:将 .pkk 文件转换为 OpenSSH 格式:

https://www.simplified.guide/putty/convert-ppk-to-ssh-key

在 Git Bash IdentityFile .ssh/config生成的密钥添加到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

对于未来的谷歌员工,

就像@CTS_AE所说的那样做,或者您可以在提升的powershell中运行它

[Environment]::SetEnvironmentVariable("GIT_SSH", "C:\Program Files\PuTTY\plink.exe", "Machine")

确保您已使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM