GitHub/GitLab配置SSH Key,以及RSA入门

码途琉璃狩
• 阅读 5463

前言

团队的项目近期更换到GitLab托管了,验证方式也从以前的HTTPS+SSH变成了纯SSH,所以就需要配置SSH Key。

SSH的加密使用的RSA算法,文章末尾将给出一个简单的加密解密演示。

一、生成公钥私钥对

先看看无Key连接远程仓库会出现什么情况:

git fetch --all
正在获取 origin
The authenticity of host '[gitlab.xxx.com]:2208 ([123.234.123.234]:1234)' can't be established.
ED25519 key fingerprint is SHA256:oDUUd81eFr9WsLsNvx9fEHxb1bS71o.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[gitlab.xxx.com]:1234' (ED25519) to the list of known hosts.
git@gitlab.xxx.com's password:
Permission denied, please try again.
git@gitlab.xxx.com's password:
  • 首先提示密钥没有验证过,是否继续
  • 选择继续后会提示输入git的密码
  • 我们没有git的密码

所以,是没有办法正常拉取的。

为什么会提示git账户呢?我猜是Url里写的是git@gitlab.xxx.com也就是用户名艾特主机名,所以终端把git作为账户处理了,才会让我们输入git的密码。

正确的打开方式来了:

在Linux/Mac终端或Windows的GitBash输入:

// 生成公钥私钥对
ssh-keygen -t rsa -C '邮箱'

// 示例,提示信息可以全部默认回车
ssh-keygen -t rsa -C '123.abc'
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/lyx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/lyx/.ssh/id_rsa
Your public key has been saved in /Users/lyx/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:eYm9YeewQwsUO/Ai5zgDb+tKNJZ7dEM 123@abc.com
The key's randomart image is:
+---[RSA 3072]----+
| o. .            |
|+..o .           |
|+*oooEo          |
|Bo= o= . + .     |
|=X o.o. S O .    |
|*oO . .  = O     |
| = +      = .    |
|. o        .     |
|.o.              |
+----[SHA256]-----+

一路操作之后会在用户目录~/.ssh/下生成两个文件:
GitHub/GitLab配置SSH Key,以及RSA入门

其中,左边的是私钥,留在自己电脑上用于身份验证。
右边的是公钥,需要上传到GitLab。

打开id_rsa.pub文件,全选复制:
GitHub/GitLab配置SSH Key,以及RSA入门

在GitLab上找到SSH Keys页面,粘贴,会自动生成标题:
GitHub/GitLab配置SSH Key,以及RSA入门

添加后下面就会显示已有的SSH Key了:
GitHub/GitLab配置SSH Key,以及RSA入门

对于Github的操作方式类似:

GitHub/GitLab配置SSH Key,以及RSA入门
GitHub/GitLab配置SSH Key,以及RSA入门

再来拉取一次就成功了:
GitHub/GitLab配置SSH Key,以及RSA入门
至此操作部分已完成。

二、RSA加密演示

之前老师演示过现场生成密钥对加密解密,但由于时间原因没有演示完,这次本文来复现一下加密过程。

RSA是一种非对称加密。
一般的加密方式称为对称加密,加密密钥和解密密钥一样,缺点在于一旦密钥泄露,密文就不安全了。
而对称加密指的是加密密钥和解密密钥不一样(公钥和私钥),公钥加密后只能用私钥解密。

接下来我们用一个在线生成网站演示一下,类似网站很多,例如:
http://www.metools.info/code/...

首先点击按钮,生成一对公钥私钥。为了方便读者跟着文章操作,我把密钥和密文都粘在了文章中。
GitHub/GitLab配置SSH Key,以及RSA入门

复制一下密钥对:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuOVdG/jlSaQuzJvFlS0
EXRD4V8OnG1GaYwxnKj7gRizgmf5GBRxQgSRj+pTkj6VsEacGbGvi0T6gDcamJJJ
H2dEgJK+J3xDhjgetiA+RZjQ6sBlAE5f2NcdtYlckzl1K5K9aZXxlFHkQAqquwyI
NJtlupDEfbmVS7Zk2YUo4F2qxfLcKtHLpQJOMCZSXNPrX7Nv5cdXkbju0QKLNqr1
ymj8gLjhNyi2duAYBqAaDFuiklscPqeG/vZRKBbEezdZVZsqEynfedz440YRB3qW
N2kRfu+mtclRftbkv2FVrYCKw4SZ+coz4XVgKiCI/t33mFPDpgdroHaNdOERWwKf
jQIDAQAB
-----END PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC245V0b+OVJpC7
Mm8WVLQRdEPhXw6cbUZpjDGcqPuBGLOCZ/kYFHFCBJGP6lOSPpWwRpwZsa+LRPqA
NxqYkkkfZ0SAkr4nfEOGOB62ID5FmNDqwGUATl/Y1x21iVyTOXUrkr1plfGUUeRA
Cqq7DIg0m2W6kMR9uZVLtmTZhSjgXarF8twq0culAk4wJlJc0+tfs2/lx1eRuO7R
Aos2qvXKaPyAuOE3KLZ24BgGoBoMW6KSWxw+p4b+9lEoFsR7N1lVmyoTKd953Pjj
RhEHepY3aRF+76a1yVF+1uS/YVWtgIrDhJn5yjPhdWAqIIj+3feYU8OmB2ugdo10
4RFbAp+NAgMBAAECggEAbIhqbQrpV93nDfBEFFB3+9OvZNNwbEw8+O4Fkx6FAnuS
K9Vf8XZQMAleCLXamnMhidadVHIp5tAsiGIrGlfVpRk3gcWTqwMHX2N2dkZ0LgEe
GfHK/n+ESb5/FvhJQ+VZL16JoVsmXgqrFYY/A3nQase9exXmRWYYvzGib6OiOmLa
0InXQDhkKHmBHkyIClrMuCsCgg+4R1Jwowc4bSTyfSgZpXj3Q63drFGuQFR+dywj
cPs55jhJ7b37Utsk1YLXB4rj9gHECQlWVLuYXcOn4QPJ2Y0Su9LzhleaRmywxDJ1
lsMsy9AYsSQkFy9FIRzqRIy4yQ/cAzF7z2z78o950QKBgQDdJHibVm+PGT0hyVts
fE+0LvUGrEaCpC1xlWs0APQCGt5dtcTiV2XT8s+wKie8jmRn5NrYUydGcVVvQ98b
e2pTO964ahsGdGJ277g7oE6MQTkXDY9dB7DryMaa224u1idYofmBUvwOtloeaqo4
hegQaNza9ziKWSYgs56dOavV8wKBgQDTt4LJC0GjaLBIp3kND/gzzPvYlzHUELqy
q/B4EQCma+/kB08d1UZWlmS/eNJrXqtbc0uxaf+83e732DippzRxHRE6SK5qk+lA
vxEoMyUn+QHAYL46nSDM9124F3TvLNhGlLPo3trA7KyWKgVpgli/VumXNUtHao8s
lZmv0mGUfwKBgQC5HyTPdMYi1o/0Tql34YCfZ4e6tFC6YFGieeCqQfoCIRfw/o74
ow0dJnByGnf1QoYO6ufAm6uPLqTEZd7JFMFnOAE0A67n8lnTEs35LDNU+eyevb07
tYqHdyW60OIl1yRM8Br8Bcn3TvOV7tjcREyGICJyMu5j8kkWqwamu3Z7vQKBgDW9
P+I+DDQpL43RjKVnJ04muspYXlqAwJL3l7syPaMAhMyxmkBtUURLOllrlqWQSxiU
ZGMtD6/l+XFJneBaQ7JueV/88OC2mJ9JoFY+3TCPQQWOyNph5eCA7XX75j+Ld346
4ou6fXY43PnkwqjsYBB5RCOQcII5JwxfELqTQReLAoGABoVxBx6i/6oFTO+zi8AM
Th98KVLTTXTMAuo2q58fArLpBXG8d0ahgnhS9vbzTp74saF5LO5GvWUuqZN5+1S3
6jJdeApldmhDqfaLzt9SRDyD6S2TgOc1TWRcIMHGUOkRkphuKvWlctn2LQXWyBTM
siDMrbdzCev5n3RqcekeTgk=
-----END PRIVATE KEY-----

接下来假设,我们要完成一项加密业务,于是就把私钥放在了自己手中,而公钥交给了客户。

如果我们想给客户发送数据,就填入私钥和明文,将会生成密文:

GitHub/GitLab配置SSH Key,以及RSA入门

私钥生成的密文:

Y1+RA9BUWG3I6UasSsofTgkNzT7hixSWboatYrOQd5lyGv5hxrFHOSe44fi1FAplv3wwoW13Sz4gQilwCPmt3yO/uhPvAnfnQ8dG6wkUK3bhG3wN7xsV+zaXizYCTLVd09s1edjhnlC7bCK2iffG5hVkQkqr5yfCJSDKxju5CZmXgGdz8q5RZy2z0nMQX8OMF5Ku3vOraF95iuE0x1BS900WN3Dpw4gEEkF9Y1EdV8GBl3F1q86o289PYlFAHAzLOPIP7MbqGizT+JOozQfMz5XRNj/7swEqvNGnsGgTUZ4Lz/3bDkrf6PtrecNBDN3bmNLbqOakweFJiovZkojE7Q==

我们把这段密文粘贴到解密框,但密钥使用私钥,看看会发生什么:

GitHub/GitLab配置SSH Key,以及RSA入门

答案是解密失败。

换成公钥解密呢?
GitHub/GitLab配置SSH Key,以及RSA入门
就成功了。

我们反向操作一下,用公钥来加密数据,用私钥解密:
GitHub/GitLab配置SSH Key,以及RSA入门

公钥加密的密文:

Yrazx/V6qgcWX25SY9h6jL4CptJkgtwbwZAcYkAfVJUYNpP+OhR2tW2yp63LXGhn9bby3ly7FAPmzz4oTsh/IUOvcNt/PCbGIRNti1WowmsARX3Yjvctd8DnSGaTX/DMcjjZIiLqsmvW90DmKOT3xWa0cinjceO2qLbBdcsVc19N2/Mchy4vy4RvuVmve5Um9IQfE6RjFz75uI+kM1T/r6BMoLq2uIdM6jVLmbidCgBBYa0nFLGfa3y2Q4bYMu+ixK0C8AEA7jWw6vli3mFbka0DD7U9+CfNN3LFV8PHaaKiPcN2j6rvg/jLMzi2reAyzWxcy5R+LgjTsFvOsXbLnA==

GitHub/GitLab配置SSH Key,以及RSA入门

同样可以解密成功。

三、总结

  • 公钥加密的数据只能私钥解密
  • 私钥加密的数据只能公钥解密

在一般的RSA应用场景中,公钥一般会复制多份,分发给不同客户,而私钥留在自己手中,多个公钥客户都会向私钥拥有者发送数据。这种情况下,网络中只会传输公钥加密的数据。

因此,公钥拥有者彼此之间不知道对方发送了什么数据,保证了隐私性。
此外,一旦公钥泄露,泄露的公钥也不能解密网络上传播的数据,不会影响密文的安全性。

参考资料:

在线密钥生成工具:http://www.metools.info/code/...
知乎RSA算法原理(需要高等数学基础):https://zhuanlan.zhihu.com/p/...

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
前端尾随者 前端尾随者
3年前
sourceTree 添加 ssh key 方法
1.使用git客户的生成公私钥:id\rsa、id\rsa.pub1.1设置Git的username和email:$gitconfigglobaluser.name"xxx"$gitconfig\globaluser.email"xxx.mail@xxx.com"1.2.生成SSH密钥过程:1.2.1.检查是不是已经存在密钥(
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
SSH公钥免密登录其他主机
在多台主机之间使用SSH免密登录,假设主机A免密登录主机B:1\.在主机A上生成自己的ssh公钥:root@A~sshkeygentrsa执行上面命令,一路回车,完成后,会在~/.ssh目录下生成2个文件:id\_rsa(私钥)和id\_rsa.pub(公钥)2\.将主机A上生成的公钥
Stella981 Stella981
3年前
Git使用总结
生成密钥1.打开GitBash,运行  \_sshkeygen  \_2.密钥生成空间\_~/.ssh/id\_rsa  \_(C:/User/.ssh)3.输入密码(不输入增直接回车跳过)4._~/.ssh/id\_rsa.pub_ (公钥), _id\_rsa_ (私钥)下载代码到本地
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
码途琉璃狩
码途琉璃狩
Lv1
有的东西终究还是要失去,那我宁愿从来都未拥有过。
文章
4
粉丝
0
获赞
0