DN42的GPG和SSH秘钥对生成与部署
使用 GPG/PGP 密钥进行身份验证
Github官方就有一份关于生成新 GPG 密钥,下面我也会将详细步骤罗列出来。
GPG密钥对生成
1.首先安装gnupg,这是gpg命令行工具。
yum install gnupg -y
- 当然有可能会有以下提示,那就代表系统已经自带安装好gpg命令行工具了。
软件包 gnupg2-2.0.22-5.el7_5.x86_64 已安装并且是最新版本 无须任何处理
- 当然有可能会有以下提示,那就代表系统已经自带安装好gpg命令行工具了。
2.生成 GPG 密钥对。 由于 GPG 有多个版本因此有几
种不同的生成方式。
- 如果使用的是2.1.17或更高版本,请使用以下命令生成密钥对。
gpg --full-generate-key
- 如果使用的不是版本 2.1.17 或更高版本,
gpg --full-generate-key
命令不起作用,请使用以下命令生成。gpg --default-new-key-algo rsa4096 --gen-key
- 如果在某些系统环境中,例如我在Centos7的时候,上述两条命令都不可用,就使用我以下方法生成秘钥对。
gpg --gen-key
3.在提示时,指定要生成的密钥类型,或按 Enter 键接受默认值。
4.在提示时,指定要生成的密钥大小,可输入4096或按 Enter 键接受默认值。
5.输入密钥的有效时长。 如果直接按 Enter 键将默认指定该密钥不会过期。 除非你需要过期日期,否则我们建议接受此默认值。
6.按照提示输入名字、邮箱。
7.验证您的选择是否正确,如果正确请输入一个O
然后回车。
8.需要创建一个密码来保护私钥,输入两次相同密码后即可。
以下是我的完整创建过程,仅供参考,请勿复制。
1 |
|
添加秘钥对到DN42的Gitea
1.输入命令输出GPG密钥长ID,例如我的长ID是D20A584D8D024498
。
1 |
|
2.获取GPG秘钥,输入以下命令,注意:结尾的D20A584D8D024498
需要替换成自己实际生成的长ID
gpg --armor --export D20A584D8D024498
3.复制以 —–BEGIN PGP PUBLIC KEY BLOCK—– 开头并以 —–END PGP PUBLIC KEY BLOCK—– 结尾的 GPG 密钥。
4.打开https://git.dn42.dev/user/settings/keys,在管理GPG秘钥中添加秘钥,粘贴上面复制的整段GPG秘钥到秘钥内容输入框,然后点击增加秘钥。
5.在新增加的秘钥右侧点击验证按钮,这时候网页会自动生成一条echo开头 –detach-sig结尾的命令,复制整条命令到生成密钥的机器上执行。
执行之后,正常会让你输入生成秘钥时候的创建的密码然后就可以了,但也有可能没有输入密码的提示直接出现下面情况
1
2
3
4
5
6
7
8[root@sea-node-jvav ~]# echo "100cf527eb8aa473340f2697a75d6f8a4fef38efb9fecb458e4ef58b45e36ec4" | gpg -a --default-key D20A584D8D024498 --detach-sig
您需要输入密码,才能解开这个用户的私钥:“jiajie.lei <leijiajie.ljj@qq.com>”
4096 位的 RSA 密钥,钥匙号 8D024498,建立于 2023-08-02
gpg: 用户取消
gpg: no default secret key: 操作已取消
gpg: signing failed: 操作已取消我的解决办法是,直接执行
gpg --detach-sign
,这时候会让你输入密码,输入之后可能会一直卡着没有下一步,等待1分钟左右按ctrl+c之后再按照第5步即可输出验证秘钥,如果还是卡主可以继续尝试这一步操作,并等待时间久一点再ctrl+c退出。
6.将输出的签名复制到网页的GPG增强签名输入框中并点击验证。
7.显示GPG 密钥 D20A584D8D024498 已被验证
,添加gpg秘钥到DN42的Gitea已完成。
输出密钥指纹
输入命令,输出密钥指纹。
gpg --list-secret-keys --keyid-format=long --fingerprint
1
2
3
4
5
6
7[root@sea-node-jvav ~]# gpg --list-secret-keys --keyid-format=long --fingerprint
/root/.gnupg/secring.gpg
------------------------
sec 4096R/D20A584D8D024498 2023-08-02
密钥指纹 = 59DF 8CEB ACDD 920D FC3E E3CE D20A 584D 8D02 4498
uid jiajie.lei <leijiajie.ljj@qq.com>
ssb 4096R/E4D68679C8A0C5D8 2023-08-02
将密钥指纹上传到公共查询服务器
gpg --keyserver hkp://keyserver.ubuntu.com --send-key [密钥指纹]
。
然后将密钥指纹填写到刚刚新建的MNT文件的
auth
项中,格式如 pgp-fingerprint [密钥指纹]
使用SSH秘钥进行身份认证
1.使用SSH秘钥认证要比上面的GPG简单得多,我们只需要在Linux或者Mac OS下直接运行ssh-keygen -t ed25519
即可,当然你也可以使用rsa的秘钥。
2. 提示Enter file in which to save the key (/root/.ssh/id_ed25519):
,正常选择默认位置存放秘钥,直接回车即可。
3. 提示Enter passphrase (empty for no passphrase):
,自行创建密码,输入两次相同即可。
复制SSH秘钥到DN42的Gitea认证
- 找到秘钥打开并复制,打开ed25519或rsa .pub结尾的文件,按照你创建的类型选择打开
- 如果在创建时候没有自定义位置的话,默认存放在
/root/.ssh/
1
2
3[root@gzten-node-jvav ~]# cd /root/.ssh/
[root@gzten-node-jvav .ssh]# ls
authorized_keys id_ed25519 id_ed25519.pub id_rsa id_rsa.pub known_hosts
- 如果在创建时候没有自定义位置的话,默认存放在
- 复制ssh-ed25519或ssh-rsa开头的一整段秘钥,到https://git.dn42.dev/user/settings/keys,管理SSH秘钥->增加秘钥->秘钥内容输入框。
- 在新增加的秘钥右侧点击验证按钮,这时候网页会自动生成一条echo开头 /path_to_your_privkey结尾的命令,复制整条命令到你生成秘钥的机器上。
- 将/path_to_your_privkey修改为自己机器放秘钥的地方,例如我的就在
/root/.ssh/id_ed25519.pub
,然后回车执行。
- 有可能会出现
unknown option -- Y
错误,这可能是ssh-keygen版本太低导致的,执行ssh -V
查看版本,如果输出低于OpenSSH_9.0p1, OpenSSL 1.0.2k-fips 26 Jan 2017
,就无法使用该功能需要升级版本,
可参考文章centos7.9离线升级ssh9.0,或者自行搜索ssh升级9.0。
- 执行之后需要输入密码,之后会输出一个签名,将—–BEGIN SSH SIGNATURE—– —–END SSH SIGNATURE—–结尾的整一段签名复制到验证框中,点击验证。
- 显示
SSH 密钥 'SHA256:L0usFG1ba6YaUvAVUEKirSCFzkUpSS4FPJsI1r71Ciw' 已被验证。
,证明秘钥添加完成。
添加SSH秘钥到文件
- 打开
/root/.ssh
目录下生成的.pub结尾的公钥,然后将整段秘钥填写到刚刚新建的MNT文件的auth
项中,格式如ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFxVANr+Srl3UtSy/ArUEV/ZveLH0kSaOkGV0FGC4aby leijiajie.ljj@qq.com
完成上述步骤后,您可以继续进行DN42注册部署流程。传送门