专栏指引
- 归属专栏: 《前端环境搭建与准备-指引》
- 上一篇:git安装
- 本文内容:ssh设置。关联文章: SSH-keygen常用命令、 git托管平台添加SSH公钥
- 下一篇:sourceTree可视化工具(
抱歉,我还没写,以后补上
)
我们在拉取或提交代码时,需要让电脑记住我们配置过的ssh-key,这样就不需要每次都需要校验用户名密码。本文我只是为新手指引SSH生成与配置,想了解更多,还是去看SSH原作者网站
ssh相关网站
- SSH学院:www.ssh.com/academy/ssh,
(作者提及到的,但是我不知道是不是官网)
- SSH原作者网站: ylonen.org/
- SSH原作者对于SSH研究的论文:SSH — Secure Login Connections over the Internet
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
id_ras.pub
id_ras.pub
:公钥存放路径:
C:\Users\{用户}\.ssh
know_host
know_host
:记录ssh访问过的主机的公钥(public key),例如以下是我访问过gittee的记录。存放路径:
C:\Users\{用户}\.ssh
当你使用SSH方式拉取项目后(已经在know_host文件生成访问记录),删除了远程的SSH密钥或者电脑重新生成新的SSH,电脑中与git托管地址的SSH密钥没有匹配上,你在使用SSH克隆链接地址重新拉取这个托管地址上的项目时,会出现Permission denied
,是因为know_host
的记录与远程git托管的匹配不上。
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
方法2:进入ssh默认生成的路径查看是否存在.ssh文件。
在此之前,请确保你的电脑查看属性中的隐藏项目选项开启,如下:
生成的.ssh文件,默认路径是
C:\Users\{电脑用户名}\.ssh
我的是在
C:\Users\GXN\.ssh
如果C:\Users\{电脑用户名}\
下存在文件夹.ssh
,则证明生成过ssh密钥。
打开id_rsa.pub
文件,文件内容末尾就记录了邮箱等信息。
你也可以使用相关的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"
2、添加SSH到git托管设置
一般ssh添加公钥操作如下:【个人】->【设置】->【SSH密钥】
可以看文章《git托管平台添加SSH公钥》查看更多git托管平台添加SSH的步骤。
以下我以一个例子说明,我是托管项目到gitee
3、SSH克隆链接拉取项目
获取SSH克隆链接
拉取项目时,默认拉取https路径,如果我们项目存放的git平台配置了SSH密钥,那么可以使用SSH路径。复制SSH克隆链接地址。
如果没有在git平台配置SSH密钥(为本机上的公钥),那么你拉取项目时,会出现以下提示,The authenticity of host 'gitee.com (212.64.63.190)' can't be established
,无法建立与托管平台的连接
如果添加了SSH密钥,如下:
使用SSH方式拉取项目
git clone SSH克隆链接
初次使用SSH地址拉取项目会提示让你输入是否建立连接,(输入yes建立连接)
此时,(没有known_hosts
文件时)会生成known_hosts
文件,会有对应的访问校验信息。
后续使用SSH地址拉取项目,就不需要重新建立连接
4. 提交代码
拉取的项目中会有.git
文件夹。
其中config
文件记录了拉取方式,我们在上面也提及了SSH方式拉取项目后在提交时是以SSH密钥校验形式的提交,git项目代码克隆/下载方式,所以只要在拉取项目时使用SSH方式,且本机私钥和git托管上的公钥匹配校验成功,在配置了身份标识user信息后那么提交代码自然也就可以成功.
5.设置用户名和邮箱
当我们使用SSH方式拉取或者提交代码时,git会先去找当前项目的.git
文件夹config
文件配置的用户身份验证信息,如果当前项目中没有配置,那么就去git存放配置文件的路径中(C:\Users\{用户}
)找到配置文件.gitconfig
里的默认身份验证信息。
以上都没有身份验证信息user
时,提交的时候,提示你配置用户名和邮箱。如下图所示:
。 其中的用户名和邮箱后续是在提交记录直接看得到的,例如
那么,有两种方式,
方式一:命令行式
你应当知道优先顺序,项目配置文件》电脑配置文件 我的建议是配置项目文件。
项目配置git用户身份信息
进入到项目路径,执行以下命令
设置用户
git config user.name "XXXX"
设置邮箱
git config user.email "XXXX"
查看当前用户
git config user.name
查看当前邮箱
git config user.email
查看项目.git文件夹下的config文件,可以看到已经有user信息了
全局配置git用户身份信息
桌面或非项目路径 执行以下命令
设置用户
git config --global user.name "XXXX"
设置邮箱
git config --global user.email "XXXX"
查看当前用户
git config --global user.name
查看当前邮箱
git config --global user.email
查看电脑用户文件夹下的.gitconfig文件,可以看到已经有user信息了
方式二: 编码式
直接按照以下格式在写好自己的用户名和邮箱后,(建议)添加到项目.git文件夹中的config文件;(不建议)或者添加到电脑的路径C:\Users\{用户}
里的.gitconfig文件。
你应当知道优先顺序,项目配置文件》电脑配置文件
[user]
name = 用户名
email = 邮箱
项目git配置
电脑全局git配置
至此SSH配置完成
专栏指引
- 归属专栏: 《前端环境搭建与准备》
- 上一篇:git安装
- 关联文章: SSH-keygen常用命令、 git托管平台添加SSH公钥
- 下一篇:sourceTree可视化工具(
抱歉,我还没写,以后补上
)