Git Bash和Pageant不使用键

dhxwm5r4  于 2023-11-15  发布在  Git
关注(0)|答案(7)|浏览(98)

我已经安装了Git for Windows(配置为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 [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)时,它使用了id_rsa,但没有使用~/.ssh中的其他键。尝试使用ssh-add ~/.ssh/bitbucket_rsa会导致:

Could not open a connection to your authentication agent.


我读过关于配置PuTTY以允许转发的内容,但这通常是建议的结尾,所以我只是为默认会话设置了这个选项并将其保存在那里。
我运行ps来检查哪些应用程序正在运行,ssh-agent不在其中。运行eval 'ssh-agent'会启动守护进程,但这没有什么区别。

64jmpszr

64jmpszr1#

这就是最终为我工作的原因。
顺便说一句,我在Windows上也有Bash,但我不认为这很重要。
我安装了Sourcetree,并指向它的文件夹plink.exeputtygen.exepageant.exe。您也可以单独下载和安装这些。

配置Windows环境变量

1.在Windows 10搜索栏中键入Environment。否则,打开系统属性/高级系统设置并找到环境变量。

  • 添加新的系统变量
    *变量名:GIT_SSH
    *变量值plink.exe文件的完整路径(pageant.exeputtygen.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配置位于:./.git/config,你可以将你的远程从使用SSH切换到HTTPS。你可以从Bitbucket仓库的 Overview 中获取以下值。

  • ssh布局:[[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) :USERNAME/REPO_NAME.git
  • https布局:https:// [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) /USERNAME/REPO_NAME.git

我注意到,在Windows 10上使用HTTPS时,它将使用Windows凭据管理器(我尝试在尝试自己解决这个问题时将凭据添加到其中,但我仍然使用SSH,所以这并不重要)当您与远程存储库交互时,它会提示您输入凭据并将其存储在Windows凭据管理器中供以后使用:)
希望这些方法中的一个能为你工作。HTTPS方法将跳过整个SSH密钥生成并将其推送到Bitbucket,但对我来说感觉更安全和便携。

Mac OS

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

新增内容

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

gzjq41n4

gzjq41n42#

你把事情搞混了。
PuTTY和Pageant与OpenSSH工具不兼容,不能一起通信。PuTTY不能从OpenSSH代理读取密钥,OpenSSH不能从Pageant读取密钥。密钥格式也不同。这是一件坏事,但没有解决方案。
此外,“代理转发”与“使用代理”不同。
如果你用plink设置了Git(确保你真的这么做了),检查你的Pageant是否正在运行,以及在PuTTY中的 ConnectionSSHAuth 下你存储的配置文件中是否选中了“Attempt authentication using Pageant”选项。
如果它不能解决你的问题,从PuTTY发布一些调试日志。

pkln4tw6

pkln4tw63#

在ssh中使用Bitbucket不需要PuTTY: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

字符串
(You也可以使用“/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“。现在真的是时候把油灰扔到一边了:不需要不同的(ppk)密钥格式和专有解决方案,现在OpenSSH正式作为Windows功能发布(目前处于测试版,2018年第一季度)。

ux6nzvsh

ux6nzvsh4#

对于未来的谷歌人来说,
就像@CTS_AE说的那样,或者你可以在提升的powershell中运行它

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

字符串
您需要重新启动shell。
要设置立即在当前PowerShell示例中尝试而不重新启动:

${env:GIT_SSH}="C:\Program Files\PuTTY\plink.exe"

z4iuyo4d

z4iuyo4d5#

要从Git Bash访问SSH密钥,可以使用this program。安装过程在链接页面中描述。Git Bash是Windows上Git附带的。

dfty9e19

dfty9e196#

我使用Git Bash for Windows 7的工作原理:将.pkk文件转换为OpenSSH格式:
https://www.simplified.guide/putty/convert-ppk-to-ssh-key
在Git Bash中将生成的key添加到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

字符串

kokeuurv

kokeuurv7#

确保您已经使用ssh url和http url克隆了存储库
要检查,请使用git origin --remote -v
如果远程URL是如下所示的HTTP URL,

origin  https://[email protected]/username/repo.git

字符串
使用git remote set-url origin命令更改远程url,例如:

git remote set-url origin [email protected]:username/repo.git

相关问题