$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
时间: 2025-05-31 07:47:13 浏览: 85
### 解决Git推送时出现的`Permission denied (publickey)`错误
当用户在执行 `git push` 操作时遇到 `Permission denied (publickey)` 错误,通常是由于SSH密钥配置不正确或缺失引起的。以下是详细的解决方案:
---
#### 1. **生成SSH密钥对**
如果尚未生成SSH密钥对,可以通过以下命令生成一个新的RSA密钥对:
```bash
ssh-keygen -t rsa -b 4096 -C "[email protected]"
```
该命令会在默认路径 `~/.ssh/` 下生成两个文件:`id_rsa`(私钥)和 `id_rsa.pub`(公钥)。其中 `-C` 参数用于指定关联的电子邮件地址[^1]。
---
#### 2. **检查SSH密钥的存在性**
如果已经生成过SSH密钥,可以使用以下命令查看是否存在有效的密钥对:
```bash
ls -al ~/.ssh
```
确保目录下存在 `id_rsa` 和 `id_rsa.pub` 文件。如果没有找到这些文件,则需要重新生成密钥对[^2]。
---
#### 3. **调整SSH密钥权限**
为了防止权限问题导致认证失败,需确保私钥文件具有正确的访问权限:
```bash
chmod 600 ~/.ssh/id_rsa
```
此命令将私钥文件的权限设置为仅允许当前用户读取和写入。
---
#### 4. **添加公钥至远程平台**
将生成的公钥内容复制到剪贴板:
```bash
cat ~/.ssh/id_rsa.pub
```
随后,在目标Git托管平台(如Gerrit、GitHub、GitLab等)中导航至账户设置的“SSH Keys”页面,并将上述公钥内容粘贴进去。点击“Add SSH Key”按钮完成绑定操作[^1]。
---
#### 5. **加载SSH密钥至SSH Agent**
确保SSH Agent已启动并将私钥成功加载:
```bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
```
第一条命令启动SSH Agent进程;第二条命令将私钥添加到Agent中以便后续自动处理认证请求。
---
#### 6. **验证SSH连接**
通过以下命令测试与远程服务器的连通性:
```bash
ssh -T git@remote_server_address
```
例如,如果是GitHub作为远程仓库,则运行:
```bash
ssh -T [email protected]
```
如果配置正确,将会收到类似以下的消息:
```
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
```
---
#### 7. **更新远程仓库URL**
确保本地仓库的远程地址采用SSH协议而非HTTPS。可以通过以下命令检查当前远程地址:
```bash
git remote -v
```
若发现使用的是HTTPS链接形式,可通过以下命令将其替换为SSH格式:
```bash
git remote set-url origin git@remote_server_address:username/repository.git
```
---
### 总结
按照以上步骤逐一排查并解决问题后,应当能够顺利解决 `Permission denied (publickey)` 的错误。核心在于确保SSH密钥的正确生成、上传以及加载,同时保证远程仓库地址符合SSH协议的要求。
---
阅读全文
相关推荐


















