带有 ssh 的 Git 克隆适用于 Linux,但不适用于 Windows PowerShell

Posted

技术标签:

【中文标题】带有 ssh 的 Git 克隆适用于 Linux,但不适用于 Windows PowerShell【英文标题】:Git clone with ssh works in Linux but not in Windows PowerShell 【发布时间】:2021-01-07 10:38:37 【问题描述】:

我在 GitHub 上有一个仓库。在 Linux 中使用 ssh 克隆它时效果很好:

> git clone git@github.com:henrikppersson74/frokenjennnie.git                                                  
Cloning into 'frokenjennnie'...
Enter passphrase for key '/home/----/.ssh/id_rsa':
.
.
Reinitialized existing Git repository in /home/* 

在 Windows PowerShell 中执行相同操作时,它不起作用:

> git clone git@github.com:henrikppersson74/frokenjennnie.git
Cloning into 'frokenjennnie'...
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.

我已将我的私人和公共 SSH 密钥从 Linux 复制到我的 Windows 机器上,它们以 id_rsa 和 id_rsa.pub 的形式存储在我的 ~/.ssh/ 中。 当我尝试从 PowerShell 使用 ssh 访问 github.com 时,它似乎有效:

> ssh git@github.com
Enter passphrase for key 'C:\Users\-----/\.ssh\id_rsa':
PTY allocation request failed on channel 0
Hi henrikppersson74! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

这与我在 Linux 中执行此操作时得到的答案相同。我想这意味着我的 SSH-key par 没问题?

在 Windows 中的 Eclipse 中工作时,使用“Git Repositories”视图可以很好地克隆相同的存储库。

之前我在 PowerShell 中创建了新的 SSH 密钥并将公共密钥复制到 GitHub,但结果相同。

我的~/.ssh/config 文件如下所示:

Host github.com
    HostName github.com
    IdentityFile ~\.ssh\id_rsa
    User git
    ForwardAgent yes

我使用的是 Git 版本:

> git --version
git version 2.28.0.windows.1

不幸的是,我没有通过使用 --verbose 标志获得额外信息:

> git clone git@github.com:henrikppersson74/frokenjennnie.git --verbose
Cloning into 'frokenjennnie'...
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.

将密钥添加到 ssh-agent 没有帮助:

> ssh-add C:\Users\-----\.ssh\id_rsa
Enter passphrase for C:\Users\-----\.ssh\id_rsa:
Identity added: C:\Users\------\.ssh\id_rsa (C:\Users\-----\.ssh\id_rsa)
> git clone git@github.com:henrikppersson74/frokenjennnie.git --verbose
Cloning into 'frokenjennnie'...
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.

我的旧钥匙可以在某处兑现吗?

有人知道为什么我无法在 Windows PowerShell 中克隆我的存储库吗?如果能得到一些帮助,我将不胜感激。

【问题讨论】:

PowerShell 中的git 命令似乎使用了不同的密钥文件。从 Linux 系统复制的私钥需要密码,而 PowerShell 中的命令似乎找到了不需要密码的密钥。您在 Windows 系统上安装了哪些版本的 Git?请edit你的问题补充信息,不要用cmets来回答。我试图修复您的命令和输出的格式。我不确定我是否正确识别了格式化的含义。请检查一切是否正确,并在必要时进行修复。最好使用复制粘贴。 要添加到 @Bodo 的有用评论中,请尝试在 PowerShell 中将 --verbose(即 2 个破折号)添加到您的 git clone 语句中,这可能会揭示它如何以及在何处找到(错误的)密钥文件跨度> OMG,这有点尴尬……找到问题了。我不久前安装的一个程序更改了我的%HOME% 环境变量。当我把它改回C:\Users\<userid> 时,它就像魅力一样。非常感谢@Bodo 和@Mathias R. Jessen 指导我:-)! @HenrikPPersson 您可以写下您如何调试和修复此问题的详细信息作为答案。 【参考方案1】:

问题是我的%HOME% 环境变量设置为错误的位置。当我把它改回C:\Users\<userid> 时,它就像魅力一样。显然 SSH 首先在 %HOME%\.ssh\ 中查找密钥,然后在 %HOME%\.ssh\config\ 中查找 en 条目,最后它使用添加到 ssh-agent 中的密钥。

【讨论】:

以上是关于带有 ssh 的 Git 克隆适用于 Linux,但不适用于 Windows PowerShell的主要内容,如果未能解决你的问题,请参考以下文章

git简明教程-linux

适用于 Windows 7 的 Git 无法从 github 克隆存储库

无法通过 SSH 隧道克隆 git

Git如何使用SSH密钥,用户名进行克隆

Gitlab - 无法通过 SSH 克隆,但 SSH 可以自己工作

SourceTree的基本使用