赞
踩
在前一篇中,我们以GitHub平台为例,详细介绍了利用HTTPS协议进行本地仓库与远程仓库之间的交互问题。这一篇中就继续来讲另一个协议 —— SSH协议的配置与使用。
还是老样子,不喜欢看原理解析的 —— 直接去看第二章
简单说,SSH是一种用于计算机之间加密登录的网络协议。 由芬兰学者Tatu Ylonen在1995年设计面世,用于信息加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广。当然需要指出的是,SSH只是一种协议,存在着很多实现,著名的有OpenSSH以及PuTTY。
原理采用了现代密码体制中的非对称加密算法。 其规定:
每个通信方均需要有一对密钥 —— 公钥和私钥,这两把密钥可以互为加解密。 公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。它还有以下几大特点:
其实SSH本身提供了两种基于不同安全验证的登录方式:口令登录和密钥登录。
口令登录其实就是通俗意义上的账号密码登录 —— 登录时会验证密码。比如之前登录阿里云服务器的例子:
这里用到的就是第二种方式 —— 密钥登录。使用前提是你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。整个登录过程可以描述为:
登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
想继续深入理解SSH协议原理的童鞋,可以参考阮一峰老师的这篇文章:
其实还是建议大家理解理解原理,不然你都不知道为什么要跟着我这样设置。闲话少说,具体的配置步骤来喽!
刚才说密钥登录的前提是你要先创建一对自己的密钥。这就需要来到你电脑用户目录下的 .ssh
文件夹。找不到或者没有这个文件夹也无所谓,直接在Git Bash中运行以下命令也可以:
$ cd ~/.ssh
生成SSH key密钥文件的具体命令为:
ssh-keygen -t rsa -C "xxx@xxx.com"
然后会有下图所示的提示。意思是让你给即将要生成的密钥对创建一个名字。这里如果直接回车,则表示以默认文件名id_rsa
创建。
接下来还会继续让你给该密钥对设置一个口令(passphrase)。如果担心私钥的安全,这里可以设置一个。
Enter passphrase (empty for no passphrase):
人家提示的也很清楚,不输入就代表没有口令限制。直接回车:
Enter same passphrase again:
还会确认一遍,继续回车即可。这样密钥对文件就创建完成了。分别是:
再深入一点:这个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
当远程主机的公钥被接受以后,它就会被保存在文件user/.ssh/known_hosts
之中。
本地密钥对文件生成后,就需要把你公钥的内容放到Git服务器上。先来查看刚才生成的本地公钥文件内容:
$ cat id_rsa.pub
可以看到一大串的字符,全选复制后打开你的代码托管平台,比如GitHub(其他平台也类似,在设置中找SSH keys配置,然后点击新增)
然后把刚才复制的公钥内容粘贴到对应的框内即可,标题可随意起。
配置完成后,可以快速检测一下,是否可以ssh连接成功。命令为:
$ ssh -T git@github.com
其他平台的命令类似:
$ ssh -T git@gitee.com // Gitee
$ ssh -T git@gitlab.com // GitLab
$ ssh -T git@e.coding.net // Coding
如果出现下图中类似的欢迎字样(Hi / Welcome等),就代表你成功啦!
上一篇 中我们用HTTPS协议的方式详细讲解了这三个最基本的远程仓库操作。换成SSH协议也是大同小异,具体细节就不赘述了。直接上操作!
同样也是先去远程仓库页面拿SSH链接:
就直接把之前Git-demo
的例子再用SSH的方式克隆(clone)一遍。继续新建文件夹,打开Git Bash输入命令:
$ git clone git@github.com:zevin-code/Git-demo.git
麻溜的,在本地工作区添加一个note.txt
文件:
然后你应该熟练的依次执行以下命令,把代码先提交至本地分支:
$ cd Git-demo/
$ git add -A
$ git status
$ git commit -m 'zevin'
然后类似的,使用remote
命令关联远程仓库:
$ git remote add origin git@github.com:zevin-code/Git-demo.git
$ git remote -v
最后就可以推送到远程仓库啦~
$ git push origin main
到你的远程仓库页面,刷新,应该就可以看到刚才上传的内容了~
拉取(pull)操作由于两种协议下的用法和命令都相同,所以就不再说了。
$ git pull origin main
想看的可以回去上一篇中复习 传送门
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。