一、bug详情
服务器已经生成密钥,并将公钥配置在了GitHub上的密钥列表中。
Linux服务器上通过 git clone
命令进行克隆私库代码。但是报错如下:
Cloning into 'PolicyChat'...
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.
二、解决
按照下面流程,执行了一遍,得到解决。
1、确认 SSH Agent 正在运行并加载了密钥
● 首先,确认 SSH Agent 正在运行并且你的私钥已经被加载。
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
上述命令将启动 SSH Agent 并加载你的私钥(假设你的私钥是 ~/.ssh/id_rsa
)。
eval “$(ssh-agent -s)” 作用:
eval "$(ssh-agent -s)"
是一个在 Unix 系统中常用的命令组合,用于启动 SSH 代理(ssh-agent)并将它的环境变量导入到当前的 shell 会话中。
具体解释:
ssh-agent:
○ ssh-agent 是一个用于管理 SSH 私钥的后台进程。它负责保存你的私钥,并在需要时提供给 SSH 客户端(如 ssh、git 等),从而避免你每次使用 SSH 时都要手动输入密码。-s
选项:
○ -s 选项告诉 ssh-agent 输出一系列 shell 命令(包括环境变量设置)来启动代理并将代理的连接信息传递给当前的 shell。eval
命令:
○ eval 是一个 shell 内建命令,用于执行作为字符串传递给它的命令。在这里,eval “$(ssh-agent -s)” 的作用是让 shell 执行 ssh-agent -s 的输出内容。$(ssh-agent -s):
○ $(ssh-agent -s) 是命令替换,表示先执行 ssh-agent -s,然后将其输出作为参数传递给 eval。ssh-agent -s 的输出通常是类似如下的内容:
SSH_AUTH_SOCK=/tmp/ssh-abc12345/agent.6789; export SSH_AUTH_SOCK;
SSH_AGENT_PID=12345; export SSH_AGENT_PID;
○ 这两行输出分别设置了两个环境变量:
■ SSH_AUTH_SOCK: 指向 ssh-agent 创建的 Unix 套接字,SSH 客户端通过这个套接字与代理通信。
■ SSH_AGENT_PID: 表示 ssh-agent 进程的 PID,可以用来管理这个代理进程。- 总结:
○ 当你运行 eval “$(ssh-agent -s)” 时,实际上是在启动 ssh-agent,并将其环境变量导入到当前 shell 中。这样,后续的 SSH 相关命令(如 ssh 或 git)就能够通过 ssh-agent 使用你加载的私钥,而不需要每次手动输入密码。
2、检查 SSH 密钥是否正确配置
● 你可以使用以下命令来检查 SSH 密钥是否正确配置并可以成功连接到 GitHub:
ssh -T git@github.com
如果配置正确,你应该看到一条欢迎消息,例如:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
如果你看到类似 Permission denied (publickey)
的错误消息,说明 SSH 密钥配置可能存在问题。
3、确认本地的 SSH 密钥与 GitHub 上的公钥匹配
● 确保你添加到 GitHub 的公钥与本地使用的私钥匹配。你可以通过以下命令查看本地公钥:
cat ~/.ssh/id_rsa.pub
然后,将输出内容与 GitHub 上的 SSH Key 列表中的公钥进行比较。
4、检查远程仓库的 URL 是否正确
● 确保你使用的是正确的 SSH URL 格式:
git@github.com:fenginsist/PolicyChat.git
如果你误用了 HTTPS URL,可能会导致权限问题。SSH URL 格式为 git@github.com:username/repository.git
。
5、权限和文件权限问题
● 确保你的 SSH 密钥文件权限正确,否则 SSH 客户端可能会拒绝使用它:
chmod 600 ~/.ssh/id_rsa
6、代理配置问题
● 如果你通过代理连接到互联网,确保代理配置没有影响到 SSH 连接。
7、SSH 配置文件 (~/.ssh/config
)
● 你可以通过编辑 SSH 配置文件来指定使用哪个 SSH 密钥(如果你有多个):
Host github.com
User git
Hostname github.com
IdentityFile ~/.ssh/id_rsa
这样可以确保正确的 SSH 密钥用于连接到 GitHub。
通过以上步骤,你应该能够诊断并解决 git clone 操作中出现的 SSH 认证问题。