缘起
场景1:你和小B是同一家公司的同事,都使用GitLab做代码仓库。
场景2:你最近在写代码方面非常卖力,大老板对你印象深刻,经常在会议或者公司群里表扬你,还说要给你涨工资、送期权。
场景3:你和小B负责相同的模块,但经常因为意见不合而争吵。
场景4:小B心里很不平衡,总是想方设法给你设置障碍,背地里说了很多坏话。
场景5:突然有一天,小B发现可以偷偷地给你改代码,例如故意给你的代码加一些bug。因此,小B故意改一些很久之前的代码,因为时间过去久了,提交记录上显示是你的,你只能认罪。但你却百思不得其解,因为你根本没写过这些有bug的代码。
由于最近代码中出现了很多bug,你总是被批评,而之前大老板许诺的涨工资和期权也没了踪影。
小 B 是如何替你提交代码的
一个简单的配置,就可以实现,代码如下
bash
git config user.name "xiaoa"
git config user.email "xiaoa@yourcompany.com"
然后提交任意代码,git 的 commit 记录里面显示的就是你的提交。
天选打工人如何维护自己的权益,不被别人冒充
为什么别人可以通过用户名和邮箱冒充你,并且替你提交代码呢?
这是因为,我们是通过 git 提交代码的,git 只会校验 SSH key 而 不会校验你是谁
,提交代码的时候,本地的公钥对代码进行加密,只要你 gitlab 上配置的私钥能解密代码,你就能提交通过。
SSH 的 不会校验你是谁
,为一些别有用心的人提供了方便,这就导致小 B 可以通过修改本地用户名和邮箱,就可以简单的冒充你,让你背了很多锅。
那么怎样才能确保不被坏人冒名顶替?你可能想到了:加个数字签名呗。没错,GPG 就是干这个活的。
配置 GPG
为了保证你 commit 的安全,你需要在本地和你的 GitLab 账户上分别做一些配置,一下是配置步骤:
1、创建一个 GPG key
安装 GPG,如果你已经安装 gpg2,在下面的命令里面你可以使用 gpg2 代替 gpg。
生成 GPG key:
bash
# 生成 GPG 命令
gpg --full-gen-key
# 选择生成key的算法,选择是RSA and RSA
# 设置密钥长度,直接回车
# 设置密钥的有效期,直接回车
# 确认内容正确,输入y
# 输入你的名字
# 输入你的邮箱地址
# 输入注释
# 输入O确定
# 为你的GPG key输入一个密码
大致的运行结果类似下面这样:
走完上面的步骤,你已经生成了一个 GPG key,下面我们来拿到生成的 key:
bash
# 1、用你之前注册的邮箱地址替换下面的<EMAIL>,然后运行下面的命令
gpg --list-secret-keys --keyid-format LONG <EMAIL>
# 2、在输出的内容里面,找到sec所在的行,复制GPG key的ID,它是在/之后的字符串,如下的值是30F2B65B9246B6CA
# sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
# D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
# uid [ultimate] Mr. Robot <your_email>
# ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
# 3、使用上一步获取的值替换<ID>,并运行如下命令
gpg --armor --export <ID>
# 4、从输出的内容里面,复制包含BEGIN PGP PUBLIC KEY BLOCK 和 END PGP PUBLIC KEY BLOCK 的内容
2、为你的账户添加一个 GPG key
下面以 gitlab 为例,步骤如下:
bash
# 1、登陆gitlab
# 2、点击右上角的头像进入设置
# 3、选择GPG Keys,将上一步获取到的key粘贴进去并保存
3、将 GPG 与 git 做关联
操作步骤如下:
bash
# 1、重复之前的步骤,获取GPG key对应的id,如果你之前有保存,则可以跳过这一步骤
# 使用邮箱地址替换下面的<EMAIL>,然后运行下面的命令
gpg --list-secret-keys --keyid-format LONG <EMAIL>
# 在输出的内容里面,找到sec所在的行,复制GPG key的ID,它是在/之后的字符串,使用它替换<ID>,并运行如下命令
gpg --armor --export <ID>
# 2、替换下面的<KEY ID>为你上一步获取的id,然后运行
git config --global user.signingkey <KEY ID>
4、签名你的 commit
有两种方式给 commit 做签名:
1、当想要给 commit 签名的时候,在 commit 后面加上-S 标签
bash
git commit -S -m "My commit message"
2、设置所有的 commit 默认添加签名
bash
git config --global commit.gpgsign true
5、GPG设置成功长这样
GPG设置成功后,你提交的每一条commit后面都会有Verified标识,大概长这样:
工作和生活分离,不同项目设置不同的 GPG key
如果你工作使用gitlab,私下使用 github,两者的用户名和邮箱不同,那该怎么办呢?我们可以在.gitconfig 使用 IncludeIf,来配置提交的 commit 使用哪个 key。
1、打开我们的 git 配置,open ~/.gitconfig
,可以看到如下配置
bash
[user]
name = yourname
email = youremail@qq.com
signingkey = D4KSL862B9061B4A
[commit]
gpgsign = true
假设公司的 gitlab 地址是 gitlab.com,可以通过在.gitconfig 下加入如下配置,使远程为 gitlab.com 的代码走另一套配置。
bash
[includeIf "hasconfig:remote.*.url:https://gitlab.com/**"]
path = ~/.gitconfig-gitlab
你可以通过git config --list
查看当前仓库的远程代码地址。
2、创建~/.gitconfig-gitlab,并添加配置
bash
touch ~/.gitconfig-gitlab
向~/.gitconfig-gitlab 里面添加如下内容,里面的邮箱和 key 替换成你自己的。
ini
[user]
email = you@example.com
signingkey = <KEY ID>
[commit]
gpgsign = true
到这里,你已经成功的配置了两套GPG。
写在最后
完成了GPG配置教程后,这意味着你已经为自己的代码和项目添加了额外的安全层。通过学习如何设置GPG密钥并与GitLab集成,你现在能够签署和验证你的提交,确保代码的完整性和可信度。这不仅提高了你个人的开发经验,也为团队协作和项目的整体安全性提供了保障。
然而,除了工作的挑战,与同事之间的合作与竞争,以及应对不公平和挫折的能力同样重要。在与小B的矛盾中,你不仅需要处理技术层面的问题,还需要应对人际关系和沟通上的挑战。
总的来说,在职场中,技术能力只是成功的一部分,处理人际关系和解决冲突同样至关重要。
最后,你看到这里,说明文章对你有用,也是对我的认可,希望您能够使用你发财的小手给我留下一个小小的赞或者评论区留下你的足迹。