GitHub配置SSH提交和拉取代码教程

278 阅读4分钟

起源

今日在GitHub新建项目后使用HTTPS提交代码失败,无论是使用代码管理工具SourceTree还是命令行都不行。

查看报错日志:fatal: ServicePointManager 不支持具有 socks5 方案的代理。

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see github.blog/2020-12-15-… for more information. fatal: Authentication failed for ‘github.com/hmis-sdu/nc…

刚开始先排查的是网络代理问题。经排查不是,仔细看日志, Please use a personal access token instead. 应该是新项目需要使用SSH方式提交代码。

生成新的 SSH 密钥并配置GitHub

查看是否已存在密钥对,windows环境下默认在C盘:C/Users/{{用户名}}/.ssh/{{id_ALGORITHM}}。这里我们只介绍新生成情况。

生成新 SSH 密钥

  1. 打开Git Bash或者PowerShell。

  2. 粘贴以下文本,将示例中使用的电子邮件your_email@example.com替换为 GitHub 电子邮件地址。

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    

    这将以提供的电子邮件地址为标签创建新 SSH 密钥。

    这里不建议使用GitHub推荐的Ed25519算法。尝试之后Ed25519算法生成的密钥对可能会出现校验问题。

    当系统提示您“Enter a file in which to save the key(输入要保存密钥的文件)”时,可以按 Enter 键接受默认文件位置。这里也建议你直接回车默认操作。

    Enter file in which to save the key (/c/Users/YOU/.ssh/id_ALGORITHM):[Press enter]
    
  3. 在提示符下,键入安全密码。类似手机解锁码。

    > Enter passphrase (empty for no passphrase): [Type a passphrase]
    > Enter same passphrase again: [Type passphrase again]
    

将 SSH 密钥添加到 ssh-agent

  1. 管理员权限的PowerShell窗口中,确保 ssh-agent 正在运行。

    # start the ssh-agent in the background
    Get-Service -Name ssh-agent | Set-Service -StartupType Manual
    Start-Service ssh-agent
    

    这点很重要,不然后面出问题查不到原因。已踩坑。 可以查询ssh-agent状态。

    Get-Service ssh-agent
    

企业微信截图_20250219184223.png

  1. 将 SSH 私钥添加到 ssh-agent。

    ssh-add C:/Users/{{用户名}}/.ssh/id_rsa
    
  2. 将 SSH 公钥复制到剪贴板。

    cat ~/.ssh/id_rsa.pub
    

    将显示的公钥复制下来备用。在复制密钥时,请勿添加任何新行或空格。

向GitHub帐户添加新的 SSH 密钥

  1. 在 GitHub 任意页面的右上角,单击个人资料照片,然后单击Settings

企业微信截图_20250219192822.png

  1. 在边栏的“访问”部分中,单击 “SSH 和 GPG 密钥”。

企业微信截图_20250219194308.png

  1. 单击“新建 SSH 密钥”或“添加 SSH 密钥” 。

  2. 在 "Title"(标题)字段中,为新密钥添加描述性标签。

  3. 选择密钥类型(身份验证或签名)。

  4. 在“密钥”字段中,粘贴公钥。

  5. 单击“添加 SSH 密钥”。

测试 SSH 连接

  1. 在PowerShell窗口中,输入以下内容:

    ssh -T git@github.com
    # Attempts to ssh to GitHub
    

    上述命令无需替换和修改。

    可能会看到类似如下的警告:

    > The authenticity of host 'github.com (IP ADDRESS)' can't be established.
    > ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
    > Are you sure you want to continue connecting (yes/no)?
    
  2. 验证所看到消息中的指纹是否与 GitHub 的公钥匹配。 如果是,则键入 yes:

    > Hi {{USERNAME}}! You've successfully authenticated, but GitHub does not
    > provide shell access.
    

    这里后半句but GitHub does not provide shell access. 可以忽略。

SourceTree配置

打开 工具-->选项-->SSH客户端配置

企业微信截图_20250220153506.png

SSH密钥选择密钥文件。SSH客户端选择OpenSSH。

常见问题

Permission denied (publickey)

“权限被拒绝”错误表示服务器拒绝了您的连接。 可能有多个原因。

常见原因:

  1. SSH 密钥未配置或者配置错误。

    如果本地机器没有配置 SSH 密钥对,或者密钥对没有正确注册到 GitHub 账户上,连接便会失败。

  2. 本地私钥文件的权限设置不正确。

    如果私钥文件的权限过于宽泛,例如对所有用户开放读写,SSH 客户端将拒绝加载该密钥,因为它不安全。

  3. 多 SSH 密钥配置不当。

    有时候一个开发者会配置多个 SSH 密钥,而 Git 不知道使用哪一个密钥进行身份验证,导致认证失败。

  4. SSH Agent 未启动或密钥未加入 Agent。

    SSH Agent 主要用来管理用户的 SSH 密钥,保证无需每次手动输入私钥密码。如果 Agent 没有启动或密钥没有添加,连接会失败。

解决问题的详细步骤

  1. 检查 SSH 密钥是否存在

    可以直接在文件夹查看 企业微信截图_20250220191056.png

  2. 检查 GitHub 账户中 SSH 公钥是否正确

    cat ~/.ssh/id_rsa.pub
    

    使用命令行或者记事本打开上述文件,复制,确保与 GitHub 账户中的公钥一致。

  3. 检查 SSH 配置文件(略)

    配置了多个 SSH 密钥时候使用。

  4. 检查本地私钥权限(略)

    我反正设了管理员权限。

  5. 确保 SSH Agent 正常运行

    参考上面章节。这是我踩坑的地方。

  6. 测试 SSH 连接

    参考上面章节。

    ssh -T git@github.com
    

    测试 SSH 连接时使用上面命令行,无需更换里面内容。这也是我踩坑的地方。