安全配置
这一部分功能为了提高工作组的安全性而设计,不是必须的。如果您觉得其中的内容复杂,可以直接略过;不使用这些功能不会对实际的字幕翻译工作造成任何影响。
双因子验证
双因子验证可以提升账户的安全性,一定程度上防止密码泄露造成账户被盗。
Gitea 提供两种双因子验证方式,一种是基于时间的 6 位数字验证码 (TOTP),另一种是物理密钥。两者都可以在 Settings - Security 中添加。
TOTP
基于时间的一次性验证码,每 30 秒更新一次。
手机上有许多支持 TOTP 的验证器。建议使用开源的 Android 应用 andOTP。部分密码管理器(如 Bitwarden)和 Linux 上的 OTPClient 也提供了支持。
请确保您的设备时间准确,否则会增大验证失败的可能性。
在 Settings - Security 里点击 Enroll into Two-Factor Authentication 即可添加验证器。扫描二维码或者手动输入密钥,随后输入验证器上的六位验证码以进行验证。
如果出现红色提示框提示密码不正确或 Failed to get secret,请登出并重新登录后再次尝试。
添加成功后,页面顶部会有绿色提示框。请立即保存好其中显示的备用密码,以防 TOTP 凭据丢失。

物理密钥
基于 WebAuthn 的二次验证。CanoKey、YubiKey 和飞天等主流物理密钥应该都支持。
点击 Add Security Key 添加物理密钥。不允许 Gitea 查看型号也不影响其工作。
使用 SSH 同步仓库
除了通过 HTTPS 之外,也可以使用 SSH 访问仓库、验证 commit、以及在本地和远程仓库之间进行同步。下文首先讲述如何生成 SSH 密钥;如果您已经有了自己的密钥,可以直接跳到“将公钥添加至 Gitea”一节。
创建 SSH 密钥对
SSH 密钥对由公钥和私钥两部分组成。公钥使服务器知道密钥所对应的用户,而私钥则证明您拥有对应的公钥。
目前有 RSA、DSA、ECDSA 及 Ed25519 等多种密钥格式。其中 Ed25519 算法加解密性能及安全性较高,而 DSA 则被认为安全性较弱。RSA 虽然使用广泛,但有不小的 安全隐患,且被指有后门。
每种密钥格式又支持不同的长度。一般来说,同种格式的密钥越长则安全性越高。
您可以使用 ssh-keygen 命令生成密钥对。可选的 -t 参数指定密钥格式,-b 参数指定密钥长度:
ssh-keygen -t rsa -b 4096 # 生成 4096 位 RSA 密钥
ssh-keygen -t dsa # 生成 DSA 密钥
ssh-keygen -t ecdsa -b 521 # 生成 521 位 ECDSA 密钥
ssh-keygen -t ed25519 # 生成 Ed25519 密钥
等待系统生成完毕,按照提示输入密钥文件的保存位置(绝对路径)。
然后您可以设置使用密钥所需的口令以保护密钥。可以按回车键跳过这一步,但出于安全考虑我们仍建议您设置口令。
下面的示例展示了用户 foo 在机器 bar 上生成名为 veritasium 的 Ed25519 密钥对,并将其保存在 /home/foo/.ssh/veritasium 的过程:
% ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/foo/.ssh/id_ed25519): /home/foo/.ssh/veritasium
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/foo/.ssh/veritasium.
Your public key has been saved in /home/foo/.ssh/veritasium.pub.
The key fingerprint is:
SHA256:SW/nkkDMtrzGcVsdfsdfsdgdsfsdChA1rI foo@bar
The key's randomart image is:
+--[ED25519 256]--+
| |
| . o . |
| + . . 4 |
|o o . 1 B |
|.E . 1 4 = . |
| . . B = @ + |
| . * @ O o . |
| + . @ . |
| .=oo |
+----[SHA256]-----+
此后,就可以在对应目录中看到保存的密钥对:
cat /home/foo/.ssh
veritasium veritasium.pub
其中 veritasium 是私钥,veritasium.pub 是公钥。
将公钥添加至 Gitea
在 Settings - SSH / GPG Keys - Manage SSH Keys 中点击 Add Key 添加自己的公钥:

使用 cat 命令或文本编辑器打开公钥文件,复制其中的内容到 Content 里。为公钥命名,并点击绿色的 Add Key 按钮。
成功后,Manage SSH Keys 里会列出所添加的密钥。点击 Verify 进行验证:

执行以 echo 开头的命令,将 /path_to_your_pubkey 替换为公钥的实际文件路径。
屏幕上会输出 SSH 签名。将其复制到 Armored SSH signature 里,点击绿色的 Verify 按钮完成验证。
KDE 用户请注意:若您无法完成签名,可能是因为系统并没有安装对应的插件。请安装 ksshaskpass 包。Arch Linux 用户可以直接用 sudo pacman -S ksshaskpass 命令安装。
设置本地 SSH 配置文件
打开 .ssh 目录里的 config 文件并添加以下内容:
Host ssh.103050.xyz
User gitea
IdentityFile <私钥的文件路径>
克隆仓库
使用以下命令将仓库克隆到本地:
git clone gitea@ssh.103050.xyz:veritasium-cn/veritasium-translate.git <目标地址>
屏幕上会显示如下内容。如果为 SSH 密钥设置了口令,请根据提示输入口令:
Cloning into '<目标地址>'...
Enter passphrase for key 'your-ssh-key':
使用 GPG 签名
您可以在 commit 时使用 GPG 密钥进行签名,使合作者确信是您做出了 commit 里的文件更改。
GnuPG 的 手册 可以指导您生成自己的密钥;手册的其他部分也会帮助您使用 GPG 的其他功能。
在生成好后,用 gpg -K 查看自己生成的密钥。用以下命令之一导出其中的公钥:
gpg -a --export <密钥标识符>
gpg -a -o <文件路径> --export <密钥标识符>
前者将导出的公钥显示在屏幕上,后者将其输出到指定的文件中。
复制屏幕输出或文件内容后,就可以在 Gitea 网页端的 Settings - SSH / GPG Keys - Manage GPG Keys 里点击 Add Key,将公钥粘贴进去。点击绿色的 Add Key 按钮添加该公钥。

验证是可选的。Gitea 提供了命令行示例,直接执行即可得到验证所需的签名。验证后,用户名一致时,Gitea 可以放行任何添加在你的 Gitea 账户中的邮箱,在一定程度上防止了邮箱的泄露。
上传成功之后,在本地 Git 客户端执行 commit 时,用 -S 使用 GPG 签名:
git commit -m "<描述信息>" -S
系统会提示您输入创建密钥时选择的口令。
commit 完成后,可以使用 git log --show-signature 查看 commit 历史记录。其中以 GPG 签名的 commit 会显示 Good signature:

如果您看到红色背景并附有 No public key 的信息,则说明本地没有签署者的公钥,因此无法验证 commit 的真实性。所以,不要忘记把自己的公钥以安全的方式分发给合作者(网络上有许多 key server 可供选择)并获取他们的公钥,然后用以下命令导入到本地:
gpg --import <文件路径>
在 Gitea 网页端执行的 commit 由一个默认的密钥签署,其公钥保存在 gitea-default-key.asc。用以上命令将此导入本地,就可以验证在网页上执行的 commit 了。