SSH和HTTPS的介绍与对比
Difference between SSH and HTTPS in GitHub
1.SSH和HTTPS介绍
SSH(Secure Shell)和HTTPS (Hypertext Transfer Protocol Secure)是两种与Github仓库交互的方法,GitHub提供SSH和HTTPS作为身份验证和通信协议,每种协议都有其优点和使用场景
SSH:SSH是一种加密网络协议,提供一种安全的方式来访问和管理远程系统。对于Github,SSH允许用户安全地进行身份验证并与GitHub服务器通信。SSH使用公钥和私钥对进行身份验证,提供了高度的安全性。
HTTPS:HTTPS是互联网上广泛使用的安全通信协议。对于Github,HTTPS允许用户使用加密连接访问GitHub存储库并与之交互,HTTPS依赖于用户名和密码或个人访问令牌进行身份验证。
2.SSH和HTTPS区别
2.1 身份验证方法
SSH:使用SSH密钥身份验证,用户生成一对密钥(公钥和私钥),公钥存储在Github,私钥存储在用户的机器上
HTTPS:使用用户名和密码或者个人访问令牌personal access token (PAT)进行身份验证,PAT是从GitHub帐户生成的令牌
2.2 安全性
SSH:因为使用了加密的密钥,因此安全性高,私钥从不通过网络传输,这样未经授权的用户难以访问
HTTPS:依赖于密码或者令牌,如果没有适当的保护,这些密码或令牌可能容易受到暴力攻击或泄漏
2.3 易用性
SSH:最开始需要设置SSH密钥,比HTTPS稍微复杂一点,但是一旦设置好,就可以在后续中一直使用,SSH就提供了一种方便安全的方式来访问GitHub存储库
HTTPS:容易使用,初学者友好,对于那些不喜欢用SSH的人更方便使用
2.4 访问控制
SSH:通过使用SSH密钥提供细粒度的访问控制,把特定用户的公钥添加到仓库中可以授予其访问权限
HTTPS:访问控制是通过GitHub权限管理的,权限可以更粗粒度。用户可以访问整个存储库,而不是特定的密钥
2.5 克隆和认证
SSH:使用SSH克隆仓库代码时,不需要每次都输入访问凭证,身份验证会通过SSH密码自动处理
HTTPS:每次与仓库交互时,都需要输入GitHub访问凭证(用户名和密码或PAT)。
3.SSH和HTTPS使用场景
SSH:看重安全性和便利性,需要频繁和Github交互,提供强访问控制和简化工作流
HTTPS:对于初学者使用比较容易
4.SSH架构
SSH认证的架构包括以下内容:
客户端(client):客户端是用户的本地机器,也是SSH密钥生成和存储的地方,用户会从客户端与Github服务端进行交互
SSH密钥对(SSH key pair):包含公钥和私钥,私钥保存在客户端,公钥会和Github服务端共享
GitHub服务端(server):GitHub维护一个服务器,监听传入的SSH连接。当用户使用其私钥进行身份验证时,服务器检查与用户的GitHub帐户关联的公钥以确认其身份。
认证过程如下
(1)用户从客户端机器生成一对SSH密钥
(2)用户通过Github账户设置将公钥与Github账户关联起来
(3)当用户与Github交互时,客户端启动到GitHub服务器的安全SSH连接
(4)服务器获取用户的公钥,和存储在对应Github账户的公钥进行对比验证
(5)如果密钥匹配,服务端会授权用户对Github资源的访问
5.HTTPS架构
HTTPS认证的架构包括以下内容:
客户端(client):与SSH的客户端类似,客户端代表用户的本地机器,是用户执行git操作和与github资源交互的地方
GitHub服务端(server):GitHub维护一个服务器来托管它的仓库和服务。当用户发出HTTPS请求时,这些请求被定向到GitHub服务器。
认证方式:(1)用户和密码,出于安全考虑使用变少(2)个人访问令牌,从用户的github账户中生成PAT
认证过程如下:
(1)用户向GitHub发起HTTPS请求,通常通过使用Git命令或通过web浏览器与GitHub交互
(2)如果使用用户名和密码,用户提供GitHub凭据
(3)如果使用PAT,则用户提供令牌
(4)GitHub服务器根据用户的帐户检查提供的凭据或令牌
(5)如果凭据或令牌有效,GitHub授予对所请求资源的访问权