git bash拉取代码成功,但idea提示无权限
SSH密钥认证失败的解决方案 当使用自定义名称的SSH密钥(如id_ed25519_work_test)时,Git和SSH客户端无法自动识别,导致Permission denied错误。解决方法是通过~/.ssh/config文件明确指定密钥路径
问题现象:
使用git bash可以正常拉取代码,但每次打开终端都必须执行
# 启动ssh-agent:
eval "$(ssh-agent -s)"
# 将生成的私有键添加到ssh-agent:
ssh-add ~/.ssh/id_rsa_account
否则idea或git bash 都会提示:
Permission denied(publikey).
Could not read from remote repository
完美解决方法:
手动配置 SSH 识别自定义密钥
需要通过 ~/.ssh/config 文件(若不存在则创建)指定 “主机 - 密钥” 对应关系,告诉 SSH 客户端:“连接某台服务器时,使用哪个自定义密钥”。
步骤如下:
-
打开
.ssh目录路径为:C:\Users\你的用户名\.ssh(例如C:\Users\hans\.ssh)。 -
创建 / 编辑
config文件-
新建一个名为
config的文本文件(无后缀名,注意不是config.txt)。 -
用记事本或编辑器打开,添加以下内容(根据你的实际情况修改):
config
# 配置远程仓库的主机(例如公司 Git 服务器或代码仓库地址) # 替换为实际的代码仓库域名/自定义别名 # 若此处使用自定义别名,则必须同步修改远程仓库项目地址(例“git@自定义别名:组织名/test-backend.git”) Host codeup.aliyun.com # 填写实际代码仓库域名地址 HostName codeup.aliyun.com # Git 仓库通常用 git 作为用户名,其他服务按实际填写 User git # 自定义密钥的完整路径 IdentityFile C:\Users\用户名\.ssh\id_ed25519_work -
说明:
Host是你连接时使用的主机名(例如git clone git@git.公司域名.com:xxx/xxx.git中的git.公司域名.com),IdentityFile指向你的自定义私钥路径。
-
-
保存文件 确保文件名为
config(无后缀),保存到.ssh目录下。 -
测试连接 执行拉取代码的命令(如
git pull),此时 SSH 会自动使用config中指定的自定义密钥,无需额外操作。
问题根源:
我原来生成的密钥是指定具体目录的:
ssh-keygen -t ed25519 -C "<注释内容>" -f ~/.ssh/id_ed25519_work_test
而SSH 的默认密钥查找规则是:SSH 客户端(如 git、ssh)在连接远程服务器时,会自动在 ~/.ssh 目录下查找以下默认名称的密钥:
id_rsa、id_rsa.pub(RSA 算法)id_ed25519、id_ed25519.pub(Ed25519 算法)id_dsa、id_ecdsa等(其他算法)
如果你的密钥文件名是自定义的(如 id_ed25519_work_test),SSH 客户端不会主动查找,因此无法使用该密钥进行认证,导致拉取代码失败。
问题背景:
由于工作电脑更换,需要重新配置仓库密钥,按照往常生成密钥、配置公钥,然后拉取代码……

what?等等,我试试git bash……

Wait a moment……
于是我各种百度、google、bing、豆包之后,再次进入git bash

成了!!!
但当我满心欢喜使用idea Update Project后……

王德法?!!!于是又一顿百度、google、bing、豆包之后,我人麻了……
然后……重启大法好~
Wait a moment……
然而公鸡嗷嗷嗷~~并无卵用!
要不重装吧?
重装密钥……
重装idea……
重装git……
重装ssh……
无语他妈给无语开门——无语到家了!
不是?为啥啊?算了,抱一下大佬们的大腿吧……
大佬A:没遇到过,我用的token……
大佬B:没遇到过,我用的命令行,我来帮你试试……,拉倒吧,改用命令行吧……
大佬C:没遇到过,我来帮你试试……,你这啥破电脑啊(大佬用的mac,我用的win11),换电脑吧……
总不能重装系统吧?
等等等等,我再捋一捋……
当我重新看到codeup配置ssh指南的生成密钥时:

总不能是这个命令的问题吧?
于是直接执行`ssh-keygen -t ed25519 -C "<注释内容>"`、配置、拉取代码……


不是???成功了?!!!
问题找到了……
问题根源:
我原来生成的密钥是指定具体目录的:
ssh-keygen -t ed25519 -C "<注释内容>" -f ~/.ssh/id_ed25519_work_test
而SSH 的默认密钥查找规则是:SSH 客户端(如 git、ssh)在连接远程服务器时,会自动在 ~/.ssh 目录下查找以下默认名称的密钥:
id_rsa、id_rsa.pub(RSA 算法)id_ed25519、id_ed25519.pub(Ed25519 算法)id_dsa、id_ecdsa等(其他算法)
如果你的密钥文件名是自定义的(如 id_ed25519_work_test),SSH 客户端不会主动查找,因此无法使用该密钥进行认证,导致拉取代码失败。
完美解决方法:
手动配置 SSH 识别自定义密钥
需要通过 ~/.ssh/config 文件(若不存在则创建)指定 “主机 - 密钥” 对应关系,告诉 SSH 客户端:“连接某台服务器时,使用哪个自定义密钥”。
步骤如下:
-
打开
.ssh目录路径为:C:\Users\你的用户名\.ssh(例如C:\Users\hans\.ssh)。 -
创建 / 编辑
config文件-
新建一个名为
config的文本文件(无后缀名,注意不是config.txt)。 -
用记事本或编辑器打开,添加以下内容(根据你的实际情况修改):
config
# 配置远程仓库的主机(例如公司 Git 服务器或代码仓库地址) # 替换为实际的代码仓库域名/自定义别名 # 若此处使用自定义别名,则必须同步修改远程仓库项目地址(例“git@自定义别名:组织名/test-backend.git”) Host codeup.aliyun.com # 填写实际代码仓库域名地址 HostName codeup.aliyun.com # Git 仓库通常用 git 作为用户名,其他服务按实际填写 User git # 自定义密钥的完整路径 IdentityFile C:\Users\用户名\.ssh\id_ed25519_work -
说明:
Host是你连接时使用的主机名(例如git clone git@git.公司域名.com:xxx/xxx.git中的git.公司域名.com),IdentityFile指向你的自定义私钥路径。
-
-
保存文件 确保文件名为
config(无后缀),保存到.ssh目录下。 -
测试连接 执行拉取代码的命令(如
git pull),此时 SSH 会自动使用config中指定的自定义密钥,无需额外操作。
更多推荐
所有评论(0)