使用 SSH 的 git 克隆只能在 Git Bash 中工作,不能在 Windows CMD 上工作

问题描述 投票:0回答:4

所以,我按照this教程了解如何使用Windows CMD为github设置SSH,一切都工作正常,直到我用

克隆一个存储库
git clone [email protected]:{myusername}/{myrepo}.git

我去哪里

[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

即使我运行

ssh -T [email protected]
,我也会收到预期的消息,告诉我我已通过身份验证。

绞尽脑汁后,我决定在 git bash 上尝试一下。

我注意到的第一件事是跑步

 ssh-add -l

在 git bash 中,我得到了

The agent has no identities.
,但是当我在 Windows CMD 上运行相同的命令时,我得到了所有 SSH 密钥?

因此,在 git bash 中添加 ssh 密钥后,我能够克隆我的存储库。

那么,为什么我只能在 git bash 上执行此操作,而不能在 cmd 或 powershell 上执行此操作?这是否与他们使用不同的 ssh 代理有关?如果是这种情况,我怎样才能将它们同步在一起?

此外,当我运行以下命令时

ssh -Tv [email protected]

使用命令我得到

debug1: identity file C:\\Users\\{myuserdirectory}/.ssh/id_rsa type 0
debug1: key_load_public: No such file or directory

但是通过 git bash 我明白了

debug1: identity file /c/Users/{myuserdirectory}/.ssh/id_rsa type 0

另一个区别是在 Windows cmd 中我没有得到任何实例

debug1: Will attempt key: ....

当我退出 git bash 并打开另一个 git bash 终端,再次运行

ssh-add -l
时,它会返回
The agent has no identities.
,即使我之前添加了它,它就像只在每个会话中持续存在,这也是不可取的。

如有任何帮助,我们将不胜感激!

bash git ssh cmd git-bash
4个回答
5
投票

也许你是对的,他们使用了不同的 ssh 代理。我遇到了完全相同的问题,这个答案对我帮助很大: https://stackoverflow.com/a/40720527/6486458

默认情况下,git 在

C:\Program Files\Git\usr\bin
中引用它自己的 ssh。我添加了
GIT_SSH
环境变量并将其设置为
C:\Windows\System32\OpenSSH\ssh.exe
。这可以防止 ssh 版本之间不一致。之后,git 开始按照 Git Bash 和 Windows cmd 的预期工作。

来自 git 文档

GIT_SSH
(如果指定)是调用的程序而不是 ssh 当 Git 尝试连接到 SSH 主机时。它的调用方式类似于
$GIT_SSH [username@]host [-p <port>] <command>

另请参阅此答案:https://stackoverflow.com/a/8713121/6486458


1
投票

看起来您的 ssh 代理未运行或无法识别您的 ssh 密钥

试试这个:

# add the default ~/.ssh keys to the ssh-agent
ssh-add

# restart the ssh-agent
eval $(ssh-agent)

# On windows:
start-ssh-agent

ssh-add

ssh-add 将 RSA 或 DSA 身份添加到身份验证代理 ssh-agent。
当运行不带参数时,它会添加文件

~/.ssh/id_rsa
~/.ssh/id_dsa
~/.ssh/identity

可以在命令行上给出替代文件名


0
投票

如果你安装 Git bash,Windows 上会出现一个奇怪的错误。打开命令提示符,然后执行

ls ~/.ssh

如果您发现此文件夹已创建,请将公钥和私钥从您的用户文件夹复制到此路径:

cp C:\Users\username\.ssh\id_* ~/.ssh/

由于某种原因,Windows 命令提示符会在您第一次执行 git 克隆时创建此路径,之后它只请求 git@gitlab / git@github 密码。


0
投票

您可能需要验证您的 git 客户端是否使用 SSH 或凭据,对于我的情况,默认使用凭据。

因此,尝试运行,(或者如果您对某些特定存储库使用专用配置,则省略

--global

git config --global --list

确保列出

core.sshcommand=C:/Windows/System32/OpenSSH/ssh.exe
,否则通过运行添加它

git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe 

再提供一些背景信息,如果您的

ssh -T [email protected]
命令欢迎您,但每当
clone
pull
fetch
时您仍然收到拒绝错误,很可能是由于 git 客户端根本不使用 SSH 引起的。如果
ssh -T ...
失败,则 SOF 一些 ssh 相关主题

© www.soinside.com 2019 - 2024. All rights reserved.