生成 SSH 密钥并与 Git 绑定:完整教程 – wiki词典


生成 SSH 密钥并与 Git 绑定:完整教程

在日常的软件开发中,我们经常需要与远程 Git 仓库(如 GitHub、GitLab、Bitbucket 等)进行交互。传统的 HTTPS 方式每次操作可能都需要输入用户名和密码,这既不安全也不便捷。SSH (Secure Shell) 密钥提供了一种更安全、更高效的认证方式,允许你在本地机器和远程 Git 仓库之间建立加密连接,无需重复输入凭据。

本教程将详细指导你完成生成 SSH 密钥、将其添加到 SSH 代理、绑定到你的 Git 托管服务,以及配置 Git 使用 SSH 的所有步骤。

1. 生成 SSH 密钥对

首先,你需要在本地机器上生成一对 SSH 密钥:一个私钥(private key)和一个公钥(public key)。

打开你的终端(在 Windows 上推荐使用 Git Bash),然后执行以下命令:

bash
ssh-keygen -t ed25519 -C "[email protected]"

命令解释:
* ssh-keygen: 用于生成、管理和转换认证密钥的工具。
* -t ed25519: 指定密钥类型为 Ed25519Ed25519 是一种现代、安全且高效的算法,推荐使用。你也可以使用 rsa -b 4096 来生成 4096 位的 RSA 密钥,但 Ed25519 在性能和安全性上更具优势。
* -C "[email protected]": 为你的密钥添加一个注释。通常使用你的邮箱地址,这有助于识别和管理多个密钥。请务必将 "[email protected]" 替换为你的实际邮箱地址。

执行命令后,系统会提示你进行以下操作:

  1. Enter file in which to save the key (~/.ssh/id_ed25519):

    • Enter 键接受默认路径和文件名 (~/.ssh/id_ed25519)。如果你希望为密钥指定一个不同的名称或路径,请在此处输入。
  2. Enter passphrase (empty for no passphrase):

    • 建议设置一个强密码(passphrase)。这个密码会加密你的私钥,即使私钥文件被盗,没有密码也无法使用。每次使用 SSH 密钥时,你可能需要输入此密码。
    • 如果你希望每次操作都无需输入密码以提高便捷性,可以直接按 Enter 键留空。但请注意,这会降低安全性。
  3. Enter same passphrase again:

    • 再次输入你设置的密码进行确认。

成功生成后,你会在用户主目录下的 .ssh/ 文件夹中找到两个文件:
* id_ed25519 (或你指定的名称): 这是你的 私钥。请务必妥善保管,不要向任何人泄露
* id_ed25519.pub (或你指定的名称.pub): 这是你的 公钥。你需要将此文件的内容添加到你的 Git 服务提供商(如 GitHub、GitLab、Bitbucket)。

重要提示:私钥安全
你的私钥是访问远程仓库的“钥匙”。一旦泄露,任何持有私钥的人都可以冒充你进行操作。请确保私钥文件权限正确(通常只有所有者可读写),并且不要将其上传到任何公开的平台。

2. 启动 SSH 代理并添加私钥

SSH 代理 (ssh-agent) 会在内存中安全地保存你的私钥和密码,这样你就不必在每次使用 SSH 密钥时都输入密码,大大提升了工作效率。

  1. 启动 ssh-agent:
    在终端中执行以下命令:
    bash
    eval "$(ssh-agent -s)"

    这条命令会启动 ssh-agent 并在当前 shell 会话中设置必要的环境变量。

  2. 将私钥添加到 ssh-agent:
    bash
    ssh-add ~/.ssh/id_ed25519

    如果你的私钥设置了密码,系统会提示你输入密码。输入一次后,ssh-agent 会记住它,直到你重启电脑或手动停止 ssh-agent

    对于 macOS 用户(macOS Sierra 10.12.2 及更高版本):
    如果你希望 macOS 记住你的密码,即使重启后也能自动加载,你可能需要修改或创建 ~/.ssh/config 文件。
    如果文件不存在,请先创建它:
    bash
    touch ~/.ssh/config

    然后用文本编辑器打开 ~/.ssh/config 文件,并添加以下内容:
    Host *
    AddKeysToAgent yes
    UseKeychain yes
    IdentityFile ~/.ssh/id_ed25519

    保存并关闭文件。这样,在你第一次输入密码后,macOS 会将其存储在钥匙串中,后续会自动使用。

3. 复制 SSH 公钥

现在你需要将公钥文件的内容复制到剪贴板,以便将其粘贴到你的 Git 托管服务。

根据你的操作系统,选择相应的命令:

  • macOS:
    bash
    pbcopy < ~/.ssh/id_ed25519.pub

  • Linux (需要安装 xclip):
    如果未安装 xclip,请先安装:
    “`bash
    # Debian/Ubuntu
    sudo apt-get update
    sudo apt-get install xclip

    CentOS/Fedora

    sudo yum install xclip
    然后复制公钥:bash
    xclip -sel clip < ~/.ssh/id_ed25519.pub
    “`

  • Windows (在 Git Bash 中):
    bash
    cat ~/.ssh/id_ed25519.pub | clip

4. 将公钥添加到 Git 托管服务

现在,登录到你使用的 Git 托管服务(如 GitHub、GitLab 或 Bitbucket),并将你复制的公钥粘贴到账户设置中。以下是主要服务的操作步骤:

GitHub

  1. 登录 GitHub。
  2. 点击页面右上角的头像,选择 Settings
  3. 在左侧导航栏中,点击 SSH and GPG keys
  4. 点击 New SSH keyAdd SSH key 按钮。
  5. 在 “Title” 字段中,为你的密钥起一个描述性的名称(例如 “My Laptop – Personal”)。
  6. 在 “Key” 文本区域中,粘贴你从剪贴板复制的公钥内容。
  7. 点击 Add SSH key 完成添加。

GitLab

  1. 登录 GitLab。
  2. 点击页面右上角的头像,选择 Preferences
  3. 在左侧导航栏中,点击 SSH Keys
  4. 在 “Key” 文本区域中,粘贴你从剪贴板复制的公钥内容。
  5. 在 “Title” 字段中,为你的密钥起一个描述性的名称。
  6. 点击 Add key 完成添加。

Bitbucket

  1. 登录 Bitbucket。
  2. 点击页面右上角的头像,选择 Personal settings
  3. 在左侧导航栏中,点击 SSH keys
  4. 点击 Add key 按钮。
  5. 在 “Label” 字段中,为你的密钥起一个描述性的名称。
  6. 在 “Key” 文本区域中,粘贴你从剪贴板复制的公钥内容。
  7. 点击 Add key 完成添加。

5. 测试 SSH 连接

公钥添加完成后,你可以测试 SSH 连接是否成功。这通常是通过尝试连接到 Git 托管服务的 SSH 服务器来完成的。

  • 测试 GitHub 连接:
    bash
    ssh -T [email protected]

    如果一切正常,你会看到类似 “Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.” 的消息。这表明你的 SSH 密钥已正确配置并被 GitHub 识别。

  • 测试 GitLab 连接:
    bash
    ssh -T [email protected]

  • 测试 Bitbucket 连接:
    bash
    ssh -T [email protected]

如果测试连接成功,你就可以通过 SSH 安全地与你的 Git 仓库进行交互了。

6. 配置 Git 使用 SSH (可选,但推荐)

如果你的 Git 项目目前使用的是 HTTPS 克隆地址,并且你希望切换到 SSH 方式,你需要更新项目中的远程仓库 URL。

  1. 导航到你的 Git 仓库目录:
    bash
    cd /path/to/your/repo

    /path/to/your/repo 替换为你的本地 Git 仓库的实际路径。

  2. 查看当前的远程 URL:
    bash
    git remote -v

    你可能会看到类似 origin https://github.com/user/repo.git (fetch) 的输出,这表明当前使用的是 HTTPS 协议。

  3. 更改远程 URL 为 SSH:
    你需要从你的 Git 托管服务获取 SSH 克隆 URL。通常,SSH 克隆 URL 的格式类似于 [email protected]:username/repository-name.git
    例如,对于 GitHub 上的一个仓库,其 SSH URL 可能为 [email protected]:your_github_username/your_repository.git
    使用以下命令更改远程 URL:
    bash
    git remote set-url origin [email protected]:your_github_username/your_repository.git

    请将 [email protected]:your_github_username/your_repository.git 替换为你的实际 SSH 克隆 URL。

  4. 再次验证远程 URL:
    bash
    git remote -v

    现在你应该看到远程仓库的 URL 已经更新为 SSH 地址。

从现在开始,当你执行 git pullgit push 或其他与远程仓库交互的命令时,Git 将会通过 SSH 进行认证,而无需再输入用户名和密码。

总结

通过本教程,你已经学习了如何生成 SSH 密钥对、启动 SSH 代理、将公钥添加到你的 Git 托管服务,并配置 Git 使用 SSH 协议。这不仅提升了代码提交的安全性,也极大地简化了日常的 Git 操作流程。享受更便捷、更安全的 Git 开发体验吧!


滚动至顶部