Git 的 HTTPS 和 SSH 方式的区别和使用

Git 有两种远程仓库与本地仓库之间 push/clone/pull 等操作的验证模式。一种是 HTTPS 模式,另一种是 SSH 模式。

本文主要讲述这两种模式的区别以及使用方式。


HTTPS协议模式

相对于 SSH 模式,HTTPS 对于新手来说更友好,假设我要 clone 一个项目,直接在clone 后跟上链接即可:

git clone https://github.com/qianfanguojin/compare.git

但是,方便的同时也会产生一些麻烦,当我们在进行push/pull操作时,每次都要输入账号密码。

当然,很多时候我们好像就是只输入了一次,后面也不需要输入了,但其实只是 Windows 操作系统帮我们记录在了 Windows凭据 中,每次我们执行操作的时候,Windows 都自动帮你填写好账号密码:

此时我们执行 push 操作,可以看到:

没有提示输入账号密码,直接推送成功。

但当我删除Windows凭据中的内容:

我再次执行推送,发现弹出输入账号密码的输入窗口:

想要了解更多关于 Git 凭据的信息,可以参考官方文档 Git 工具 - 凭证存储

综上,我们可知,HTTPS 方式在 Git 执行操作时每次都要账号密码验证,但是得益于凭据管理模式,使用起来也方便许多,但当我们在多台电脑上运行操作我们的项目时,每次都要输入账号密码,就会非常的麻烦。


SSH 协议模式

根据 Git 的官方文档 服务器上的 Git - 协议 ,SSH 在 Git 中的使用具有架设简单、高效、方便管理优点,但 SSH 的缺点在于你不能通过它进行匿名访问,即便是只要读取数据,使用者也要有通过 SSH 访问你的主机的权限,这使得 SSH 协议不利于开源的项目。

这里我教大家如何使用SSH来操作。

1.确认自己电脑是否拥有SSH密钥:

cd ~/.ssh
ls

默认情况下,用户的SSH密钥都存储在~/.ssh目录下,也就是用户根目录下的.ssh文件夹中,我们需要寻找一对以 id_dsaid_rsa 命名的文件,其中一个带有 .pub 扩展名。

.pub 文件是你的公钥,另一个则是私钥。 如果找不到这样的文件(或者根本没有 .ssh 目录)No such file or directory 表示文件夹不存在,则表示没有密钥,我们需要自己创建。

2.生成 SSH 密钥

在命令行下(cmd 或是 Git bash)我们可以通过 ssh-keygen命令创建:

ssh-keygen

当然,为了使生成的SSH密钥更清楚明了,还可以添加一些附加控制命令

ssh-keygen -t rsa -C "你的email地址"

其中:
-t 指明密钥类型,默认为 rsa,可省略。
-c 指明注释文字,如邮箱,会显示在你生成的 id_rsa 文件内容最下方。
-f 指定密钥文件存储的文件名字

可以看到,我们使用不带任何参数方法创建时,首先 ssh-keygen 会确认密钥的存储位置,如你没有指定,则它使用默认的目录(默认是 .ssh/id_rsa)。

然后会要求你输入两次密钥口令,口令的作用即是一个密码,即当你使用密钥时需要输入该口令,如果你不想在使用密钥时输入口令,将其留空即可。

3.将SSH密钥添加到服务器

不同的 Git 服务器添加操作区域不一样,这里我以 Github 为例。

点击右上角个人头像,从下拉框中进入Setting:

然后进入SSH and GPG Keys设置:

然后按照下图操作:

4.利用SSH密钥推送

由于我们先前使用的远程关联方式是 HTTPS 链接,所以我们先将远程关联信息删除。

git remote remove origin

然后添加 SSH 链接的远程关联信息

git remote add origin "你的远程仓库SSH链接"

将 master 本地分支推送到远程默认分支

git push --set-upstream origin master

参考链接:

https://blog.csdn.net/duzilonglove/article/details/79415628

保姆级教程,教你使用Git推送你的项目到Github_千帆过烬的博客小站-CSDN博客