git push --set-upstream origin master,返回信息 Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
时间: 2025-05-20 08:23:31 浏览: 45
### Git 推送时因公钥权限被拒绝的解决方案
当遇到 `Permission denied (publickey)` 错误时,通常是因为本地计算机未正确配置 SSH 密钥或 GitHub 上未关联该密钥。以下是详细的解决方法:
#### 1. 检查是否存在现有的 SSH 密钥
在 Windows 系统中,可以通过以下命令检查 `.ssh` 文件夹下是否已存在名为 `id_rsa` 和 `id_rsa.pub` 的文件:
```bash
cat ~/.ssh/id_rsa.pub
```
如果返回错误信息类似于 `No such file or directory`[^1],则说明尚未生成 SSH 密钥。
#### 2. 如果不存在,则生成新的 SSH 密钥
运行以下命令来创建一个新的 SSH 密钥(替换 `<[email protected]>` 为您的实际邮箱地址):
```bash
ssh-keygen -t rsa -b 4096 -C "<[email protected]>"
```
此操作会提示您输入保存位置,默认路径为 `~/.ssh/id_rsa`。接着会让您设置密码保护(可选)。完成后会在指定目录生成一对私钥 (`id_rsa`) 和公钥 (`id_rsa.pub`)。
对于非 Administrator 用户,在类似路径如 `C:\Users\<YourUsername>\.ssh\` 下也会生成相应文件[^3]。
#### 3. 将新生成的公钥添加至剪贴板
复制刚刚生成的公钥内容到剪贴板以便稍后粘贴到GitHub账户里去。Linux/macOS 可以直接用下面这个指令完成;而在Windows上可能需要手动打开文件并复制其全部文本。
```bash
clip < ~/.ssh/id_rsa.pub #适用于Windows PowerShell环境下的简化版
pbcopy < ~/.ssh/id_rsa.pub # macOS专用
xsel --clipboard --input < ~/.ssh/id_rsa.pub # Linux部分发行版本支持
```
#### 4. 添加SSH Key 到GitHub账号
登录到自己的GitHub页面 -> Settings -> SSH and GPG keys -> New SSH key 。将之前复制好的公钥填入Key框内,并给它起个Title名称方便识别即可提交保存下来。
#### 5. 测试连接是否成功
最后一步验证我们的设置有没有生效,尝试通过 ssh 命令联系服务器端看看反馈情况怎么样 :
```bash
ssh -T [email protected]
```
正常情况下应该收到如下消息表示一切OK啦!如果不是的话请重新核对自己每步的操作流程哦~
> Hi username! You've successfully authenticated...
以上就是针对 **Git Push Permission Denied Publickey** 故障排查以及修复办法的具体介绍[^2].
---
### 提供一段Python脚本用于自动化检测和解决问题的部分环节
如果您希望编写一个小工具来自动化某些过程比如读取.ssh中的pubkey或者上传等动作,这里给出一个简单的例子作为参考:
```python
import os
def check_ssh_key_exists():
"""Check if an SSH key exists."""
path = os.path.expanduser("~/.ssh/id_rsa.pub")
return os.path.isfile(path)
if __name__ == "__main__":
if not check_ssh_key_exists():
print("No existing SSH key found.")
email = input("Enter your email address for generating a new SSH key: ")
command = f'ssh-keygen -t rsa -b 4096 -C "{email}"'
os.system(command)
print("\nNew SSH key generated!")
else:
with open(os.path.expanduser('~/.ssh/id_rsa.pub'), 'r') as pubkey_file:
pub_key_content = pubkey_file.read().strip()
print(f"\nExisting SSH public key content:\n{pub_key_content}")
```
相关问题
阅读全文