【学了就忘】GitHub — 70.配置Git免密登陆GitHub

1、为什么要配置Git免密登陆

在使用Git的过程中,每次向GitHub仓库推送代码,或者从GitHub上拉取数据的时候,都要输入Git的账号与密码,进行身份验证才可访问,非常麻烦。那么如何才能避免每次推送代码都要输入账号密码呢?

我们要设置Git免密登录,使Git本地版本库可以免密登录并访问GitHub,也就是配置SSHKey。

即:因为我们是要把Git版本库中的代码推送到GitHub上,GitHub上需要对我们版本库进行验证,所以要输入Git的用户名和密码。

2、免密登录原理

(1)兔密登录机制

Git主机间的通信采用的是SSH协议,即Sercure Shell协议。

该协议的兔密登录机制,要求主机之间采用SSH-key,即SSH密钥的方式进行身份验证。

SSH密钥包含“公钥与私钥",所以我们首先要了解什么是“公钥与私钥”,然后还要理解“公钥与私钥”在免密登录中的作用,即免密登录的工作原理。

(2)公钥与私钥
对于公钥与私钥,要了解以下三点:

  1. “公钥与私钥加密”是一种“不对称的加密方式”,是传统“对称加密方式”功能的增强。
  2. 公钥与私钥是成对的,即一个公钥对应一个私钥。使用公钥加密后,只能使用私钥进行解密。
  3. 公钥与私钥的关系:就好比“锁与钥匙”的关系。公钥相当于“锁”,锁是可以被他人看到的,是要发送给别人的,所以称为公钥。私钥相当于“钥匙”,它是不能公开的,只能有公钥发出者保存。

(3)免密码登录的工作原理

对于免密登录的机制,主要由两部分构成:构建与验证。

  • 免密登录构建:
    Git版本库所在的主机上生成一对密钥:公钥与私钥,保存到本地主机中。
    Git版本库将公钥及用户信息(用户名,密码等)保存到GitHub上。

  • 免密登录验证:
    1、Git版本库向GitHub发送连接请求,包含Git版本库的用户信息。
    2、GitHub从本地文件中查找是否存连接中包含的用户信息。若不存在:则拒绝访问,若存在:可以访问。
    3、GitHub将加密后的随机字符串,发送给Git版本库。
    4、Git版本库将加密后的随机字符串,使用私钥进行解密。
    5、Git版本库解密后的字符发送给GitHub。
    6、GitHub将接收到的字符串,与本地未加密的字符串进行比较,相同则可以访问,不同则被拒绝。

免密登录原理示意图:

简单的理解:

SSH Key也可以简单的理解为你的身份标识,放在GitHub上面标明你是这个项目的一个开发人员,但是别人可以截获,但是你本机上的私钥无法截获,SSH Key也就保证了每次传输是安全的。

3、设置本地库对GitHub的免密登录

此时我们要设置Git本地库对GitHub的免密登录,密钥对应由本地版本库主机生成,而GitHub中只需要保存公钥即可。

(1)在本地版本库主机中生成SSHkey密钥

1)生成密钥

进入Git bash客户端,执行命令ssh-keygen -t rsa -C "邮箱地址",来生成SSHkey密钥。

ssh-keygen命令常用参数:

  • -t:指定生成密钥的类型,默认使用RSA类型密钥。
  • -f:指定生成密钥的文件名,默认id_rsa(私钥id_rsa,公钥id_rsa.pub
  • -P:提供旧密码,空表示不需要密码(-P ' ')。
  • -N:提供新密码,空表示不需要密码(-N ' ')。
  • -C:提供一个新注释,比如邮箱。

注意:

  • 这里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名称,并不约束或要求具体命名为某个邮箱。现网的大部分教程均讲解的使用邮箱生成,其一开始的初衷仅仅是为了便于辨识,所以使用了邮箱。
  • 直接执行ssh-keygen命令也可以生成SSHkey密钥。。
  • 命令在任何路径下都可以执行。

生成SSHkey密钥示例:

# 1.执行ssh-keygen命令,生成SSHkey密钥
L@DESKTOP-T2AI2SU MINGW64 /j
$ ssh-keygen -t rsa -C "309877988@qq.com"

# 生成公共/私有rsa密钥对。
Generating public/private rsa key pair.

# 生成公共/私有rsa密钥对。
# 输入要在/c/Users/L/.ssh/目录中,保存密钥的文件名称
# 回车代表默认,即id_rsa,例如:/c/Users/L/.ssh/id_rsa
# 如果输入指定的文件名。则为/c/Users/L/.ssh/指定的文件名。
# 我们回车,执行默认选项即可。
Enter file in which to save the key (/c/Users/L/.ssh/id_rsa):

# 创建目录“ /c/Users/L/.ssh”。
Created directory '/c/Users/L/.ssh'.

# 提示你:不输入密码,则密码为空。这里我们是可以设定密码的,例如123456。
# 我们回车即可。
Enter passphrase (empty for no passphrase):

# 再次输入相同的密码:(同上也回车)
Enter same passphrase again:

# 经过上面三次回车,下面SSHKey密钥就自动生成了
# 您的私钥已保存在/c/Users/L/.ssh/id_rsa中。
Your identification has been saved in /c/Users/L/.ssh/id_rsa.
# 您的公钥已保存在/c/Users/L/.ssh/id_rsa.pub中。
Your public key has been saved in /c/Users/L/.ssh/id_rsa.pub.
# 关键指纹是:(如果没有指定-C 参数内容,默认应该是用系统用户@主机名来代替)
The key fingerprint is:
SHA256:hcDGM+lT+gMRTqxOZnGtxFwiqZ/dMRRIpCXlWJLG3GY 309877988@qq.com
# 密钥的随机图像为:
The key's randomart image is:
+---[RSA 3072]----+
|   o+&@*o.       |
|    B%Eo+.       |
|   ooXoO. .      |
|  . = * o.       |
|   * o =So       |
|    + . +        |
|         .       |
|                 |
|                 |
+----[SHA256]-----+

说明:

生成的SSHkey密钥存放在,主机的当前用户主目录下的,隐藏目录.ssh下面。

.ssh目录下面有两个文件,默认分别是id_rsa文件与id_rsa.pub文件,其中id_rsa文件中存放的是私钥,id_rsa.pub文件中存放的是公钥。

执行完成上边命令,在用户根目录自动生成.ssh目录。(windows系统中c:/users/administrator/.ssh可以找到)

进入.ssh目录中可以看到两个文件,id_rsa文件是私钥,id_rsa.pub是是公钥,这两个文件是成对出现的,说明生成SSHkey密钥成功。

2)补充:生成SSHkey密钥到指定的目录中

执行命令:$ ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/github_id_rsa

这样可以直接指定生成密钥文件的位置和名称。

可以到~/.ssh目录下进行查看,也是生成了一对密钥,github_id_rsagithub_id_rsa.pub

这样的操作,也是非常方便的。

(2)把公钥的内容配置到GitHub中

1)复制公钥文件内容

L@DESKTOP-T2AI2SU MINGW64 /j
$ cat /c/Users/L/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2F5mS2Tc2dFlSCD6No4ySbNeAVc6V/pLIM7VVD4EJkfJQ3XgN7nWhVMHVOCYnkobfXmWq40RWIq12R1jftw4zRJuJ4GXAOjOyvog1M3dpr/QwA2AB+To4jsf0UVdxJ8ckiQ2yCtPauzAAoyXsiwHr3QSjXoRU5q0TZu4RhtNkvlO9w3KUbjxQoderGJr3PjOUOWfEqIdG8n14SX9/wgM8TC+0FDKjxJmeCaZa+Y+1HvEtreKP5Bj1Z2p3lusS+UGBuiX8/Kgo76N/7SgkZFYOJ9nbUSJeVTxUPpoaGpfA6cWRKWNP16fJ9oX59d4OxJ4/LtCVkRd5vVKQEnCQlvJgfnXbkOVcr3c0V19Ku+DvyCf4/YVGR0E6vjCRVucQ4v3Pre3Tu1bJ3iOCT4fpQFz8zJEKdyFhuIifPUei9qr7lihwjsmxom2FGBrkRphS3/CjA9nAlWxv2fBsuC11ZZAlnm4gD6bDfHiso0tpvJOO0S7IsqD5it0tZmEjd0KwuCk= 309877988@qq.com

2)登陆GitHub官网进入设置页面

在GitHub网站的右上角,点击下图所示图标,在下拉列表中选择Settings,打开Settings设置页面。

3)在左边导航栏中,选择SSH and GPG keys,在右边点击new SSH key

4)编辑SSH Key信息,并创建SSH Key

填写页面中信息:

  • 需要编辑一个Title来说明此Key认证的是哪个用户。可以随意定义,例如,这是张三在家里主机上的Git要连接该GitHub,所以可以命名为zhangsanHome。
  • 把公钥(id_rsa.pub)文件中的内容填写的第二个栏中。

如下图:

点击Add SSH key后,即可看到刚刚在GitHub中配置的公钥信息。

(3)验证SSH链接认证是否配置成功

也就是测试SSHkey密钥是否配置成功。

使用ssh -T命令进行校验,执行ssh -T git@github.com命令。

# 执行校验命令
L@DESKTOP-T2AI2SU MINGW64 /j
$ ssh -T git@github.com

# 无法确定主机“ github.com(192.30.255.113)”的真实性。
# RSA密钥指纹为SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8。
# 您确定要继续连接(是/否/ [指纹])吗?
The authenticity of host 'github.com (192.30.255.113)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
# 我们这里输入yes,需要进行校验。

# 如果设置了密码,就会第二个停顿,就需要输入上边我们设置的密码123456。

# 最后如下内容,证明验证成功!
Hi Lxxxxx! You've successfully authenticated, but GitHub does not provide shell access.

此时,已经证明我们配置好了,Git账户SSHKey的认证方式。

提示:其他远程仓库的SSHKey配置步骤都类似,例如:Gitee,GitHub、Gitlab等

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容