3.6、SSH配置

在 Gitea 中配置 SSH 密钥是为了让你在与 Gitea 进行 Git 操作(如克隆、拉取、推送)时,能够使用 SSH 协议进行身份验证,而不需要每次输入用户名和密码。以下是详细的 SSH 密钥配置过程:

3.6.1、生成 SSH 密钥对

在进行 SSH 配置之前,你需要先生成一对 SSH 密钥。这个过程需要在你的本地机器上完成。

3.6.1.1、生成 SSH 密钥(Linux/macOS)

在 Linux 或 macOS 上,打开终端并执行以下命令来生成 SSH 密钥对:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa:指定使用 RSA 算法。
  • -b 4096:指定密钥长度为 4096 位,增加安全性。
  • -C "your_email@example.com":给密钥添加一个注释(通常使用电子邮件地址)。

执行后,系统会提示你输入密钥文件的保存位置。通常可以直接按 Enter,将密钥保存在默认位置 ~/.ssh/id_rsa。

系统会要求你输入密码(可选)。如果不想设置密码,可以直接按 Enter。

3.6.1.2、生成 SSH 密钥(Windows)

在 Windows 上,你可以使用 Git Bash 或者 PuTTYgen 来生成 SSH 密钥。

使用 Git Bash: 打开 Git Bash 并执行以下命令:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
3.6.2、添加 SSH 密钥到 SSH Agent

为了方便管理,你可以将 SSH 私钥添加到本地的 SSH 代理(ssh-agent)中,这样你就不需要每次都输入密码。

2.1 启动 SSH Agent(Linux/macOS)

在终端中运行以下命令:

eval "$(ssh-agent -s)"
3.6.2.2、将 SSH 私钥添加到 SSH Agent

然后将私钥添加到 SSH 代理中:

ssh-add ~/.ssh/id_rsa

如果你设置了密钥密码,系统会要求你输入密码。

3.6.3、复制公钥

现在你需要将生成的 公钥(id_rsa.pub)复制到 Gitea。

3.6.3.1、查看公钥内容

你可以使用以下命令查看公钥内容:

cat ~/.ssh/id_rsa.pub

该命令会输出类似下面的内容:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtNXi7xHpc0gkEkc9+4w1d0m29HZw2F5ss... your_email@example.com
3.6.4、在 Gitea 中添加 SSH 公钥
3.6.4.1、登录到 Gitea
  1. 打开 Gitea Web 界面,并使用你的管理员账号登录。
  2. 点击右上角的 头像,然后选择 Settings(设置)。
3.6.4.2、添加 SSH 密钥
  1. 在左侧导航栏中,点击 SSH Keys。
  2. 在页面中,点击 Add Key 按钮。
3.6.4.3、填写公钥信息
  1. 在弹出的窗口中,给密钥命名(例如:My Laptop)。
  2. 在 Key 字段中粘贴你之前复制的公钥内容(即 id_rsa.pub 文件的内容)。
  3. 点击 Add Key。

完成后,你的 SSH 密钥就添加到 Gitea 账户中了。


3.6.5、配置 Git 使用 SSH

现在你已经在 Gitea 上配置了 SSH 密钥,接下来配置本地 Git 使用 SSH 进行操作。

3.6.5.1、设置 Git 配置

确保 Git 使用与你 Gitea 账户相对应的用户名和电子邮件。可以使用以下命令进行配置:

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
3.6.5.2、克隆仓库

使用 SSH 协议克隆你的 Gitea 仓库。例如,假设你的仓库 URL 是 git@your_gitea_host:username/test.git:

git clone git@your_gitea_host:username/test.git

这时 Git 会使用 SSH 密钥进行身份验证,而不是要求你输入用户名和密码。

3.6.5.3、推送代码

在本地代码仓库中进行更改并提交后,使用以下命令推送代码到 Gitea:

git push origin master

Git 会使用 SSH 密钥进行身份验证,而无需每次输入用户名和密码。


3.6.6、验证 SSH 连接

如果你想确认 Gitea 是否能够正确识别你的 SSH 密钥,可以使用以下命令来测试 SSH 连接:

ssh -T git@your_gitea_host

# 如果不是默认端口需要明确指定
ssh -i ~/.ssh/id_rsa -p 23 git@x.x.x.x

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

Hi username! You've successfully authenticated, but Gitea does not provide shell access.

这表明你的 SSH 密钥配置正确,Gitea 已经识别了你。


3.6.7、常见问题排查
  • 错误:Permission denied (publickey).
    • 确保 Gitea 上的公钥与本地的公钥匹配。
    • 确保私钥被正确添加到 SSH Agent。
    • 检查 .ssh 目录和 id_rsa 文件的权限:chmod 700 ~/.ssh 和 chmod 600 ~/.ssh/id_rsa。
  • SSH 密钥未生效:
    • 确保在 Gitea 上添加了正确的公钥,并且没有任何空格或换行错误。
    • 确保本地 Git 配置了正确的用户名和邮箱。

更多推荐