Git使用SSH、HTTPS的异同及其原理

Git克隆远程仓库的方式

使用Git从gitee或者github上克隆仓库一般有两种方式。

一种是使用https协议:

git clone https://gitee.com/id/仓库名.git

或者

git clone https://用户名@gitee.com/id/仓库名.git(这种方式指定克隆的用户

,验证时只输入密码即可)

一种是使用ssh协议:

git clone git@gitee.com:id/仓库名.git

HTTPS原理

https可以看做是http+ssl,ssl协议位于网络应用层和传输层之间,只要用于为应用层提供加密服务。在https中即使用ssl协议为http提供加密传输服务。

https操作远程仓库只需要用到username和pwd即可。分两步进行,用户实际只需用操作第一步,第二步对用户是透明的。

  1. 使用username和pwd验证对远程repo的操作权限;
  2. 2.ssl对传输数据进行加密。

HTTPS操作远程repo的常用配置

因只需要本地用户提供username和pwd验证操作权限,因此只要配置好自己的username和pwd即可。

如果本地没有永久保存对远程仓库的账号和密码,那么每次对远程仓库进行操作时,server都会要求用户输入账号和密码。

Windows和一些第三方Git client(像TortoiseGit)支持永久保存git账户密码。

Windows查看保存的账号信息:

Win键 ->搜索credential ->管理Windows 凭据 -> 普通凭据(or 控制面板 -> 用户账户 -> 管理Windows 凭据 -> 普通凭据)

git 命令行永久保存账号密码:

git config --global credential.helper store#设置保存凭证

git config --global user.name "用户名"

git config --global user.email "邮箱"

git config --global user.password "密码"

这样就可以永久保存了,避免重复输入带来的繁琐。

HTTPS操作远程repo的常见错误

server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

要知道ssl协议需要验证目标网站的CA证书,如果客户端任务目标网站的CA证书不可信,就会报这个错误。

使用https访问gitee或者github网站不应该出现这个问题,因为这两个网站发布的CA证书肯定是申请了可信的证书的。

出现这个问题一般是在公司内网访问时,因为公司内网安全策略导致的。解决办法就是将目标网站涉及的根证书加入到系统的可信列表即可。

从浏览器提取到gitee的根证书文件,供下一步使用;

 

 

有两种方式可以导入CA证书。

方式一:将将crt证书文件放到目录:/usr/local/share/ca-certificates

加入后执行update-ca-certificates 即可导入成功。

方法:修改配置文件:/etc/ca-certificates.conf,将下载的CA证书路径加入该配置文件。

加入后执行update-ca-certificates 即可导入成功。

SSH原理

SSH是Secure Shell的缩写,即安全外壳协议,是建立在应用层基础上的安全协议,专为远程登录会话和其他网络服务提供安全加密的协议。

ssh使用非对称加密所需的key-pairs完成身份验证和数据加密。ssh client和server分别需要持有非对称秘钥中的一个。

出于安全考虑,通常由用户使用密钥生成工具生成RSA密钥对,并将public key添加到服务端,客户端自己保留private key。client使用private key向服务端证明自己的身份。

注意ssh秘钥只对ssh协议有效,如果你是使用https协议克隆仓库到本地的,即使在码云上添加了ssh公钥,你在本地执行push、pull等操作时,还是会要求你输入码云的用户名和密码。

那本地怎么创建ssh的公钥和私钥呢?使用ssh-keygen命令。

ssh-keygen -t ed25519 -C "秘钥名称"  

保存路径默认即可,回车。

下一步会让你输入密码,注意:这并不是码云的登录密码,而是ssh在使用该秘钥时要求输入的密码,可以防止误操作,如果你在这一步设置了密码,那么后面在使用git push,pull等操作时会要求你输入该密码,这就是有些人问为什么明明添加了ssh key密钥,每次push或pull时还要输入密码的原因了。这里我们不设置,直接两次回车!

这样就生成了ssh的公钥和私钥,将pub后缀的公钥复制到gitee或者github上。后面就不需要每次都要输入密码和用户名了,可以愉快的玩耍了。

需要注意的是,ssh client会默认使用~/.ssh/id_rsa,如果你生成的秘钥不在默认路径,需要位ssh client指定。

SSH和HTTPS比较

https协议端口一般使用80和443,防火墙一般会打开这两个端口,用户可以直接使用。可以实现匿名访问。

ssh需要安装ssh client ,需要生成RSA密钥对,配置稍微繁琐点。

总的来说,HTTPS方便快捷,适合于开源项目,SSH适合内部项目。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 SSH 拉取代码,首先需要确保你已经生成了 SSH 密钥对并将公添加到你的 Git仓库提供商(如 GitHubGitLab 或 Bitbucket)的帐户设置中。以下是使用 SSH 拉取代码的步骤: 1. 生成 SSH 密钥对。在终端中运行以下命令: ``` ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 这将生成一个新的 SSH 密钥对,其中 "your_email@example.com" 是你的电子邮件地址。 2. 保存密钥对。你将被要求选择保存密钥的位置和文件名(默认情况下为 `id_rsa` 和 `id_rsa.pub`)。你可以选择使用默认值,也可以自定义。 3. 添加公钥到你的帐户。打开你的 Git 仓库提供商的网站,并导航到你的帐户设置中的 SSH 密钥部分。将 `id_rsa.pub` 文件的内容复制到那里并保存。 4. 验证 SSH 连接。在终端中运行以下命令,替换 `git@example.com` 为你的 Git 仓库提供商的主机名: ``` ssh -T git@example.com ``` 如果一切顺利,你应该会收到一条欢迎信息。 5. 在终端中导航到你想要拉取代码的目录。 6. 使用 SSH URL 克隆仓库。在你的 Git 仓库提供商的网站上找到 SSH URL(类似于 `git@example.com:username/repo.git`)并复制它。然后在终端中运行以下命令,将 URL 替换为你的仓库的实际 URL: ``` git clone git@example.com:username/repo.git ``` 这将克隆仓库到当前目录。 现在,你应该成功地使用 SSH 拉取代码了。每次拉取或推送代码时,Git使用你的 SSH 密钥进行身份验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰年稻香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值