SSH保存身份验证

666 阅读8分钟

专栏指引

我们在拉取或提交代码时,需要让电脑记住我们配置过的ssh-key,这样就不需要每次都需要校验用户名密码。本文我只是为新手指引SSH生成与配置,想了解更多,还是去看SSH原作者网站

ssh相关网站

git项目代码克隆/下载方式

在此之前,你需要了解 在git中clone项目一般有两种方式:HTTPS和SSH,现在新出了GPG。HTTPS和SSH的区别如下:

  • HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码;

  • SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

ssh简介

SSH是Secure Shell的缩略描述,那ssh又是什么呢?我们简单了解以下, 翻译一下SSH研发作者的话来介绍SSH就是

SSH通过不受信任的网络提供安全登录、文件传输、X11 和 TCP/IP 连接。它对传输的数据使用加密身份验证、自动会话加密和完整性保护。RSA 用于密钥交换和认证,对称算法(例如,IDEA 或三密钥三重DES)用于加密传输的数据。

SSH 协议还可以用作通用传输层加密机制,提供主机身份验证和用户身份验证,以及隐私和完整性保护

提取关键词SSH协议最主要就是提供身份验证

类似与网站或应用为了安全起见,只有登录成功(身份验证成功)的用户,才有权限进入。同理,项目代码为了安全起见,只有身份验证成功的开发者,才有权限拉取或者提交代码。

我们平常说的SSH一般会把其协议混在一起说,如果不是公司底层架构师去部署环境与配置,一般我们只需要熟练掌握以下流程:

相关文件

id_rsa

id_rsa :私钥

存放路径:C:\Users\{用户}\.ssh

image.png

id_ras.pub

id_ras.pub:公钥

存放路径:C:\Users\{用户}\.ssh

image.png

know_host

know_host:记录ssh访问过的主机的公钥(public key),例如以下是我访问过gittee的记录。

存放路径:C:\Users\{用户}\.ssh

image.png

image.png 当你使用SSH方式拉取项目后(已经在know_host文件生成访问记录),删除了远程的SSH密钥或者电脑重新生成新的SSH,电脑中与git托管地址的SSH密钥没有匹配上,你在使用SSH克隆链接地址重新拉取这个托管地址上的项目时,会出现Permission denied,是因为know_host的记录与远程git托管的匹配不上。

image.png

ssh配置身份验证流程

这个配置的目的,我先做个比喻,我们在做登录功能时,会有一个记住账号密码的选项。只要我们勾选了这个选项,那么后续我们在访问这个网站的时候,仅需要登录一次,后续便不需要重新登录了。这个流程就和SSH保存身份校验类似。

  • 1、电脑上生成SSH密钥————————(先注册账号密码)
  • 2、打开git托管的个人中心设置SSH,添加公钥————————(账号密码存到数据库中)
  • 3、拉取时使用SSH方式(本机的私钥和远程配置的公钥系统自动匹配校验)————(登录界面输入账号密码)
  • 4、保存访问记录到know_host————————(勾选记住账号密码选项,缓存登录)
  • 5、配置标识身份信息—————————(用户身份标识)

后续再次访问同一个git托管地址时,我们就不需要每次都输入账号密码。

1、电脑上生成SSH密钥

首先,我们先知道电脑是否已经生成过SSH密钥,生成过的SSH密钥是不是我们自己的。 正确的流程应该是:

  • 1、检查是否生成了SSH
    • 已有,则需要确认是否是属于我们自己的SSH,如果不是我们自己的,我们需要重新生成
    • 未有,则生成属于我们自己的SSH
  • 2、生成SSH

你可以从SSH学院-密钥了解更多ssh密钥相关的知识

1.1 检查是否已经生成过SSH

有两种方法检查,

方法1:输入命令查看公钥文件的指纹数据

输入以下命令回车,就可以看到相关的公钥指纹数据

ssh-keygen -l

image.png

方法2:进入ssh默认生成的路径查看是否存在.ssh文件。

在此之前,请确保你的电脑查看属性中的隐藏项目选项开启,如下:

image.png

生成的.ssh文件,默认路径是

C:\Users\{电脑用户名}\.ssh

我的是在

C:\Users\GXN\.ssh

image.png

image.png

如果C:\Users\{电脑用户名}\下存在文件夹.ssh,则证明生成过ssh密钥。

打开id_rsa.pub文件,文件内容末尾就记录了邮箱等信息。

image.png

你也可以使用相关的SSH client客户端工具或软件来查看我这里就不列举了。

1.2、生成SSH密钥

  • 一般我们输入以下命令后一路回车:
ssh-keygen -t rsa -C "邮箱名称"

-C后是一个标记,不一定非得是邮箱,但是我们一般是使用邮箱作为标记。

更多描述请看:git生成ssh key,或者更多详情请看SSH学院生成SSH详解www.ssh.com/academy/ssh…

  • 我输入
ssh-keygen -t rsa -C "999@qq.com"

image.png

2、添加SSH到git托管设置

一般ssh添加公钥操作如下:【个人】->【设置】->【SSH密钥】 可以看文章《git托管平台添加SSH公钥》查看更多git托管平台添加SSH的步骤。

以下我以一个例子说明,我是托管项目到gitee

3、SSH克隆链接拉取项目

获取SSH克隆链接

拉取项目时,默认拉取https路径,如果我们项目存放的git平台配置了SSH密钥,那么可以使用SSH路径。复制SSH克隆链接地址。

image.png

如果没有在git平台配置SSH密钥(为本机上的公钥),那么你拉取项目时,会出现以下提示,The authenticity of host 'gitee.com (212.64.63.190)' can't be established,无法建立与托管平台的连接

image.png

如果添加了SSH密钥,如下:

image.png

使用SSH方式拉取项目

git clone SSH克隆链接

初次使用SSH地址拉取项目会提示让你输入是否建立连接,(输入yes建立连接)

image.png 此时,(没有known_hosts文件时)会生成known_hosts文件,会有对应的访问校验信息。

image.png

image.png

后续使用SSH地址拉取项目,就不需要重新建立连接

image.png

4. 提交代码

拉取的项目中会有.git文件夹。

image.png

其中config文件记录了拉取方式,我们在上面也提及了SSH方式拉取项目后在提交时是以SSH密钥校验形式的提交,git项目代码克隆/下载方式,所以只要在拉取项目时使用SSH方式,且本机私钥和git托管上的公钥匹配校验成功,在配置了身份标识user信息后那么提交代码自然也就可以成功.

image.png

image.png

5.设置用户名和邮箱

当我们使用SSH方式拉取或者提交代码时,git会先去找当前项目的.git文件夹config文件配置的用户身份验证信息,如果当前项目中没有配置,那么就去git存放配置文件的路径中(C:\Users\{用户})找到配置文件.gitconfig里的默认身份验证信息。

image.png 以上都没有身份验证信息user时,提交的时候,提示你配置用户名和邮箱。如下图所示:

image.png。 其中的用户名和邮箱后续是在提交记录直接看得到的,例如

image.png

那么,有两种方式,

方式一:命令行式

你应当知道优先顺序,项目配置文件》电脑配置文件 我的建议是配置项目文件。

项目配置git用户身份信息

进入到项目路径,执行以下命令

设置用户

git config user.name "XXXX"

设置邮箱

git config user.email "XXXX"

查看当前用户

git config user.name

查看当前邮箱

git config user.email

image.png

查看项目.git文件夹下的config文件,可以看到已经有user信息了

image.png

全局配置git用户身份信息

桌面或非项目路径 执行以下命令

设置用户

git config --global user.name "XXXX"

设置邮箱

git config --global user.email "XXXX"

查看当前用户

git config --global user.name

查看当前邮箱

git config --global user.email

image.png 查看电脑用户文件夹下的.gitconfig文件,可以看到已经有user信息了

image.png

方式二: 编码式

直接按照以下格式在写好自己的用户名和邮箱后,(建议)添加到项目.git文件夹中的config文件;(不建议)或者添加到电脑的路径C:\Users\{用户}里的.gitconfig文件。

你应当知道优先顺序,项目配置文件》电脑配置文件

[user]
	name = 用户名
	email = 邮箱

项目git配置

image.png

电脑全局git配置

image.png

至此SSH配置完成

专栏指引