当前位置:   article > 正文

【 Git学习记录(五)】GitHub远程仓库中基于SSH协议的基本操作总结(clone / push / pull)_github ssh原理

github ssh原理

在前一篇中,我们以GitHub平台为例,详细介绍了利用HTTPS协议进行本地仓库与远程仓库之间的交互问题。这一篇中就继续来讲另一个协议 —— SSH协议的配置与使用。

一. SSH协议简述

还是老样子,不喜欢看原理解析的 —— 直接去看第二章

1.1 SSH原理 —— 非对称加密算法

简单说,SSH是一种用于计算机之间加密登录的网络协议。 由芬兰学者Tatu Ylonen在1995年设计面世,用于信息加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广。当然需要指出的是,SSH只是一种协议,存在着很多实现,著名的有OpenSSH以及PuTTY。

在这里插入图片描述
原理采用了现代密码体制中的非对称加密算法。 其规定:

每个通信方均需要有一对密钥 —— 公钥和私钥,这两把密钥可以互为加解密。 公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。它还有以下几大特点:

  • 公钥和私钥成对出现;
  • 如果用公钥对数据进行加密,只有用对应的私钥才能解密;
  • 如果可以用私钥解密,则必然是对应的公钥加的密;

其实SSH本身提供了两种基于不同安全验证的登录方式:口令登录和密钥登录。

1.2 口令登录

口令登录其实就是通俗意义上的账号密码登录 —— 登录时会验证密码。比如之前登录阿里云服务器的例子:

在这里插入图片描述

1.3 密钥登录

这里用到的就是第二种方式 —— 密钥登录。使用前提是你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。整个登录过程可以描述为:

登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。


想继续深入理解SSH协议原理的童鞋,可以参考阮一峰老师的这篇文章:

SSH原理与运用(一):远程登录


二. 配置SSH协议环境

其实还是建议大家理解理解原理,不然你都不知道为什么要跟着我这样设置。闲话少说,具体的配置步骤来喽!

2.1 本地生成SSH key

刚才说密钥登录的前提是你要先创建一对自己的密钥。这就需要来到你电脑用户目录下的 .ssh 文件夹。找不到或者没有这个文件夹也无所谓,直接在Git Bash中运行以下命令也可以:

$ cd ~/.ssh
  • 1

生成SSH key密钥文件的具体命令为:

ssh-keygen -t rsa -C "xxx@xxx.com"
  • 1
  • -t rsa —— 表示采用RSA加密算法生成公钥/私钥对;
  • "xxx@xxx.com" —— 注册GitHub等平台账号的邮箱;

然后会有下图所示的提示。意思是让你给即将要生成的密钥对创建一个名字。这里如果直接回车,则表示以默认文件名id_rsa创建。

在这里插入图片描述
接下来还会继续让你给该密钥对设置一个口令(passphrase)。如果担心私钥的安全,这里可以设置一个。

Enter passphrase (empty for no passphrase):
  • 1

人家提示的也很清楚,不输入就代表没有口令限制。直接回车:

Enter same passphrase again:
  • 1

还会确认一遍,继续回车即可。这样密钥对文件就创建完成了。分别是:

  • id_rsa —— 私钥文件;
  • id_rsa.pub —— 公钥文件;

在这里插入图片描述
再深入一点:这个key文件本质是一个超长字符串,蓝色箭头所指的图形是该超长字符串经过RSA和SHA-256加密算法转换而成的有规律的图片(randomart image)。相较超长字符串,图形更加形象,便于比对。

更多有关randomart image图形的生成问题请看帖子:

ssh keygen 中生成的 randomart image 是什么


❀ 拓展一下❀

有没有人和我一样 —— .ssh文件夹内有一个名为known_hosts的文件。 它出现的原因是:

我们之前进行过ssh口令登录的操作。其实是在用户初次进行口令登录时,远程服务器会把它的公钥发回来由用户核对:

Are you sure you want to continue connecting (yes/no)? yes
  • 1

当远程主机的公钥被接受以后,它就会被保存在文件user/.ssh/known_hosts之中。


2.2 平台添加SSH公钥(public key)

本地密钥对文件生成后,就需要把你公钥的内容放到Git服务器上。先来查看刚才生成的本地公钥文件内容:

$ cat id_rsa.pub
  • 1

在这里插入图片描述
可以看到一大串的字符,全选复制后打开你的代码托管平台,比如GitHub(其他平台也类似,在设置中找SSH keys配置,然后点击新增)

在这里插入图片描述
然后把刚才复制的公钥内容粘贴到对应的框内即可,标题可随意起。

在这里插入图片描述

2.3 测试连接

配置完成后,可以快速检测一下,是否可以ssh连接成功。命令为:

$ ssh -T git@github.com
  • 1

其他平台的命令类似:

$ ssh -T git@gitee.com  // Gitee
$ ssh -T git@gitlab.com  // GitLab
$ ssh -T git@e.coding.net  // Coding
  • 1
  • 2
  • 3

如果出现下图中类似的欢迎字样(Hi / Welcome等),就代表你成功啦!

在这里插入图片描述

二. 基于SSH协议的远程仓库操作

上一篇 中我们用HTTPS协议的方式详细讲解了这三个最基本的远程仓库操作。换成SSH协议也是大同小异,具体细节就不赘述了。直接上操作!

同样也是先去远程仓库页面拿SSH链接:

在这里插入图片描述

3.1 clone —— 克隆远程仓库内容到本地

就直接把之前Git-demo的例子再用SSH的方式克隆(clone)一遍。继续新建文件夹,打开Git Bash输入命令:

$ git clone git@github.com:zevin-code/Git-demo.git
  • 1

在这里插入图片描述

3.2 push —— 推送本地代码到远程仓库

麻溜的,在本地工作区添加一个note.txt文件:

在这里插入图片描述
然后你应该熟练的依次执行以下命令,把代码先提交至本地分支:

$ cd Git-demo/
$ git add -A
$ git status
$ git commit -m 'zevin'
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
然后类似的,使用remote命令关联远程仓库:

$ git remote add origin git@github.com:zevin-code/Git-demo.git
$ git remote -v
  • 1
  • 2

在这里插入图片描述
最后就可以推送到远程仓库啦~

$ git push origin main
  • 1

在这里插入图片描述
到你的远程仓库页面,刷新,应该就可以看到刚才上传的内容了~

在这里插入图片描述

3.3 pull —— 拉取远程仓库的更新项

拉取(pull)操作由于两种协议下的用法和命令都相同,所以就不再说了。

$ git pull origin main
  • 1

想看的可以回去上一篇中复习 传送门

推荐阅读
相关标签