如何设置 Git SSH Key?(快速上手) – wiki基地

如何设置 Git SSH Key?(快速上手)

在 Git 的世界里,SSH 密钥扮演着至关重要的角色。它们就像一把数字钥匙,让你无需每次都输入用户名和密码,就能安全地与远程仓库(如 GitHub、GitLab、Bitbucket 等)进行通信。这不仅提高了效率,更增强了安全性,因为密码容易被泄露或暴力破解,而 SSH 密钥则更加难以被攻破。

本文将带你深入了解 SSH 密钥的工作原理,并手把手教你如何在不同的操作系统上设置 Git SSH Key,让你快速上手,畅通无阻地使用 Git。

1. SSH 密钥的工作原理:公钥与私钥的舞蹈

理解 SSH 密钥的工作原理,是掌握其设置方法的关键。想象一下,你有一把锁(公钥)和一把对应的钥匙(私钥)。

  • 公钥(Public Key): 这把锁可以公开给任何人。你可以把它放到远程仓库的服务器上。
  • 私钥(Private Key): 这把钥匙必须由你妥善保管,绝对不能泄露给任何人。它存放在你的本地计算机上。

当你想访问远程仓库时,你的 Git 客户端会用你的私钥对一个随机字符串进行“签名”。远程仓库的服务器收到这个签名后,会用你之前上传的公钥来验证签名是否有效。如果验证通过,就证明你拥有对应的私钥,也就证明了你的身份,允许你访问仓库。

这种机制的安全性在于:

  • 非对称加密: 公钥和私钥是成对生成的,但它们是不同的。即使别人拿到了你的公钥,也无法推导出你的私钥。
  • 单向验证: 只有私钥才能生成有效的签名,公钥只能用来验证签名,而不能生成签名。

2. 检查是否已存在 SSH 密钥

在生成新的 SSH 密钥之前,最好先检查一下你的计算机上是否已经存在密钥。这可以避免不必要的重复操作。

打开你的终端(Terminal、Git Bash 或 PowerShell,取决于你的操作系统):

  • Linux / macOS:

    bash
    ls -al ~/.ssh

  • Windows (Git Bash):

    bash
    ls -al ~/.ssh

    或者
    bash
    ls -al /c/Users/你的用户名/.ssh

如果输出结果中包含类似 id_rsa.pubid_ed25519.pub 这样的文件(.pub 扩展名表示公钥),那么说明你已经有 SSH 密钥了。你可以选择使用已有的密钥,也可以选择生成新的密钥(如果你想更换密钥或使用不同的密钥对)。

如果输出结果显示 “No such file or directory” 或类似信息,则表示你还没有 SSH 密钥,需要生成新的密钥。

3. 生成新的 SSH 密钥

生成 SSH 密钥的过程非常简单,只需使用 ssh-keygen 命令即可。

打开终端,输入以下命令:

bash
ssh-keygen -t <密钥类型> -b <位数> -C "你的邮箱地址"

让我们来解释一下这些参数:

  • -t <密钥类型>:指定要生成的密钥类型。常用的密钥类型有:
    • rsa:经典且广泛使用的密钥类型,兼容性好。
    • ed25519:更现代、更安全的密钥类型,推荐使用。
  • -b <位数>:指定密钥的位数。对于 RSA 密钥,通常使用 2048 位或 4096 位。对于 Ed25519 密钥,不需要指定位数。
  • -C "你的邮箱地址":添加一个注释,通常是你的邮箱地址,用于标识这个密钥。

示例:

执行命令后,系统会提示你:

  1. Enter file in which to save the key (/Users/yourusername/.ssh/id_rsa):
    这是询问你密钥的保存位置。通常情况下,直接按 Enter 键使用默认位置即可。

  2. Enter passphrase (empty for no passphrase):
    这是询问你是否要为私钥设置密码(passphrase)。设置密码可以增加安全性,即使私钥文件泄露,没有密码也无法使用。但每次使用密钥时都需要输入密码,可能会有些麻烦。你可以根据自己的安全需求来决定是否设置密码。如果不想设置密码,直接按 Enter 键两次即可。

生成成功后,你会看到类似以下的输出:

Your identification has been saved in /Users/yourusername/.ssh/id_ed25519.
Your public key has been saved in /Users/yourusername/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [email protected]
The key's randomart image is:
+--[ED25519 256]--+
| . |
| + . |
| . = |
| . + o |
| o = S . |
| . = * o |
| o + B |
| . = . |
| E . |
+----[SHA256]-----+

这表示你的 SSH 密钥已经生成成功,私钥保存在 id_ed25519 文件中,公钥保存在 id_ed25519.pub 文件中。

4. 将 SSH 公钥添加到远程仓库

现在,你需要将你的公钥添加到你想要访问的远程仓库(如 GitHub、GitLab、Bitbucket)中。

4.1 复制 SSH 公钥

首先,你需要复制你的公钥内容。

  • Linux / macOS:

    bash
    cat ~/.ssh/id_ed25519.pub # 或者 cat ~/.ssh/id_rsa.pub,根据你的密钥类型

    然后,你可以用鼠标选择并复制输出的公钥内容。
    或者使用以下命令直接复制到剪贴板:

    bash
    pbcopy < ~/.ssh/id_ed25519.pub # macOS
    xclip -selection clipboard < ~/.ssh/id_ed25519.pub # Linux (需要安装 xclip)

  • Windows (Git Bash):

    bash
    cat ~/.ssh/id_ed25519.pub # 或者 cat ~/.ssh/id_rsa.pub,根据你的密钥类型

    然后,你可以用鼠标选择并复制输出的公钥内容。
    或者:
    bash
    clip < ~/.ssh/id_ed25519.pub

4.2 添加公钥到远程仓库(以 GitHub 为例)

  1. 登录 GitHub: 打开浏览器,登录你的 GitHub 账户。

  2. 进入 SSH and GPG keys 设置页面:

    • 点击右上角的头像,选择 “Settings”。
    • 在左侧边栏中,选择 “SSH and GPG keys”。
  3. 添加新的 SSH 密钥:

    • 点击 “New SSH key” 按钮。
  4. 填写信息:

    • Title: 为你的密钥起一个描述性的名称,例如 “My Home Laptop” 或 “Work MacBook”。
    • Key: 将你之前复制的公钥内容粘贴到这个文本框中。
  5. 添加密钥: 点击 “Add SSH key” 按钮。

  6. 验证: GitHub 可能会要求你输入密码进行验证。

完成以上步骤后,你的 SSH 公钥就成功添加到 GitHub 了。对于 GitLab 或 Bitbucket,添加 SSH 密钥的步骤类似,只是具体的界面和操作可能略有不同。你可以在它们的官方文档中找到详细的说明。

5. 测试 SSH 连接

添加完 SSH 公钥后,最好测试一下连接是否正常。

打开终端,输入以下命令:

bash
ssh -T [email protected]

(如果你使用的是 GitLab 或 Bitbucket,将 github.com 替换为相应的域名,例如 gitlab.combitbucket.org。)

如果一切正常,你会看到类似以下的输出:

Hi yourusername! You've successfully authenticated, but GitHub does not provide shell access.

这表示你已经成功通过 SSH 连接到 GitHub。如果出现错误提示,请仔细检查前面的步骤,确保你的密钥生成正确,公钥添加正确。

6. 使用 SSH URL 克隆仓库

现在,你可以使用 SSH URL 来克隆远程仓库了。

在 GitHub 上找到你想要克隆的仓库,点击 “Code” 按钮,选择 “SSH”,然后复制 SSH URL。

在终端中,使用 git clone 命令克隆仓库:

bash
git clone [email protected]:yourusername/your-repository.git

(将 yourusername 替换为你的 GitHub 用户名,your-repository 替换为仓库名称。)

由于你已经设置了 SSH 密钥,Git 会自动使用你的私钥进行身份验证,无需输入用户名和密码。

7. 常见问题及解决方法

  • Permission denied (publickey):

    • 原因: 这通常表示 SSH 密钥验证失败。
    • 解决方法:
      • 确保你生成了 SSH 密钥,并且公钥已正确添加到远程仓库。
      • 检查你的私钥文件权限是否正确。通常情况下,私钥文件的权限应设置为 600(只有所有者可以读写)。可以使用 chmod 600 ~/.ssh/id_ed25519(或 id_rsa)命令来修改权限。
      • 如果你使用了密码保护私钥,确保你输入的密码正确。
      • 检查你的 SSH 配置文件(~/.ssh/config),确保没有错误的配置。
  • Could not open a connection to your authentication agent:

    • 原因: 这通常表示 SSH agent 没有运行,或者 Git 无法连接到 SSH agent。
    • 解决方法:
      • 启动 SSH agent:
        • Linux / macOS:
          bash
          eval "$(ssh-agent -s)"
        • Windows (Git Bash): Git Bash 通常会自动启动 SSH agent。如果 agent 没有启动,你可以尝试重新启动 Git Bash。
      • 将私钥添加到 SSH agent:
        bash
        ssh-add ~/.ssh/id_ed25519 # 或 id_rsa
  • [email protected]: Permission denied (publickey). fatal: Could not read from remote repository:

    • 原因: 可能是由于网络问题,或者github的服务器问题。
    • 解决方法:
      • 检查网络连接。
      • 稍等片刻重试。
      • 如果仍然无法解决,请联系 GitHub 支持。

8. 进阶技巧

  • 使用多个 SSH 密钥: 如果你需要为不同的远程仓库或不同的身份使用不同的 SSH 密钥,你可以生成多个密钥对,并在 SSH 配置文件(~/.ssh/config)中进行配置。

    例如:

    “`
    Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github

    Host gitlab.com
    HostName gitlab.com
    User git
    IdentityFile ~/.ssh/id_ed25519_gitlab
    “`

    在这个例子中,当你连接到 github.com 时,Git 会使用 id_ed25519_github 私钥;当你连接到 gitlab.com 时,Git 会使用 id_ed25519_gitlab 私钥。

  • 使用 SSH agent 转发: 如果你需要从一台服务器跳转到另一台服务器,并且希望在跳转后的服务器上也能使用你的 SSH 密钥,你可以使用 SSH agent 转发。

    在连接到第一台服务器时,使用 -A 选项:

    bash
    ssh -A user@server1

    然后,在 server1 上,你可以直接连接到 server2,而无需再次输入密码或进行 SSH 密钥验证。

总结

设置 Git SSH Key 是 Git 使用过程中的一个重要环节。通过本文的详细讲解,你应该已经掌握了 SSH 密钥的工作原理,并学会了如何在不同的操作系统上生成、添加和测试 SSH 密钥。

记住,保护好你的私钥至关重要。不要将私钥泄露给任何人,也不要将私钥存储在不安全的地方。

掌握了 SSH 密钥的使用方法,你将能够更加安全、高效地使用 Git,享受 Git 带来的便利。现在,开始你的 Git 之旅吧!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部