Advertisement

你应该为 Git 使用 HTTPS 还是 SSH?

阅读量:

当连接到远程Git存储库时,默认有两种身份验证选项:HTTPS和SSH。GitHub默认使用HTTPS(如https://github.com/user/RepoName.git),通过Web协议直接通信;而SSH(如user@ipaddress:folder/file)则类似于交互式 shell 的连接方式。GitHub建议使用Personal Access Token替代密码,并推荐HTTPS作为默认连接方式。虽然SSH通常被认为更安全,但其密钥需存储在本地硬盘而非记忆中。两者均提供免于中间人攻击的安全性,并可结合MFA或2FA增强安全性。最终选择取决于个人经验与需求:熟悉命令行的用户可能更倾向于SSH;只需简单配置且支持双向身份验证的HTTPS则是常见选择。

在这里插入图片描述

当访问包含 Github 等远程 Git 存储库时,您一般有两种连接选项——HTTPS 或 SSH。两者各有其适用场景,在大多数情况下 HTTPS 被认为是更为安全的选择。然而实际上问题远比这要复杂得多。

有什么不同?

该存储库中的身份验证机制基于远程配置的 URL 参数设置。而 GitHub 通常采用 HTTPS 协议作为其默认网络通信方式。

复制代码
    https://github.com/user/RepoName.git
    
    
      
    
    AI助手

然而,在这种情况下也可以选择使用SSH协议。即使未启动交互式 shell 并未执行任何命令,其格式与通过常规SSH连接至Linux 服务器时的一致。

复制代码
    user@ipaddress:文件夹/文件
    
    
      
    
    AI助手

在Github上以及多数服务中,默认情况下您将连接到名为'git'的用户账户,并通过'.git'命令指定您的个人账户(即GitHub上的个人账户)作为文件夹中的资源访问入口。

复制代码
    git@github.com:user/RepoName.git
    
    
      
    
    AI助手

为什么要使用 HTTPS?

那么,您应该使用哪一种?虽然 SSH 通常被认为更安全,但对于 Github 的基本用法,带密码的 HTTPS 身份验证是可以接受的。事实上,Github 本身默认并推荐大多数人使用 HTTPS。
然而,它不像以前那么简单——从 2021 年 8 月起,Github 禁止使用您的帐户密码进行身份验证。您将需要创建一个Personal Access Token,它的作用类似于第二个密码,但它是唯一的并且可以被授予特定的权限。它还允许您在帐户上使用 2FA 没有问题。

HTTPS 有很多优点:

采用简单的身份验证认证机制(HTTPS),对于除Github这一例外情况外的所有服务系统而言,默认即可实现代码推送与拉取操作。无需为多设备配置多对SSH公钥。其使用的端口443通常可通过所有支持互联网连接的安全设备访问,并非总是如此适用于SSH连接。大部分用户的主要缺陷在于每次提交都需要输入Git密码或令牌,并非永久存储于缓存中(尽管该信息被暂时存储于缓存中)。然而,在采用SSH密钥的情况下,则仅需在本地磁盘上管理密钥文件即可完成操作。

为什么要使用 SSH?

认为 HTTPS 在安全性方面明显低于 SSH 是一种误解。实际上两者均提供免受中间人攻击的安全连接服务。只要底层密钥是安全的 这两种协议都将完成相同的工作 并且能够实现基于公钥的身份验证功能。采用 Git 协议的 HTTPS 方式会将您的密码发送至网络 但默认情况下不会发送密钥至网络;而若选择 SSH 密钥 则需手动配置以确保 MFA 的安全性。

在身份验证方面(尤其是使用)上具有优势的是SSH——其采用的密钥机制不仅因其长度之长而难以无意间泄露;另一方面由于其笨重且独一无二的设计特性而通常被视为更为安全的选择。然而从人类易受安全威胁的现状来看(或者换句话说),这种防护方式或许反而是更为合理的选择。
其中的一个明显缺点在于这种文件虽然易于获取但会被存储于本地硬盘而非记忆中。

此外, 该系统能够有效防止数据泄露. 该系统确保不会被重复使用, 并且其数据始终未存放在任何第三方服务器上. 由于仅将您的公钥提交至 Github 并在本地使用私钥执行身份验证查询操作, 因此该系统完全避免了公开密钥以及通过网络传输的风险.

SSH 有很多缺点,但如果您知道自己在做什么,则可以减轻这些缺点:

在GitHub的设置中配置使用SSH密钥仅需在其设置界面中输入一些命令并进行简单的点击操作即可完成。
优化多台计算机上的密钥管理过程并非易事,但通过合理配置SSH主机文件以及利用Git远程控制工具进行设置,这一过程也并非十分困难。
虽然可以将密钥发送到其他设备,但考虑到用户通常会拥有多枚SSH公钥,因此这种做法并无必要。
参考文章:如何为Git Shell命令使用不同的私有SSH密钥(作者:Jane Doe, 时间:2023年)

SSH 特别能够在访问 Github 时通过 HTTPS 隧道传输,在 ssh.github.com 的 SSH 配置中指定相应的主机名即可实现这一功能。然而,在大型服务中这一点尤为突出,并非适用于所有 Git 服务。

复制代码
    托管 github.com
      主机名 ssh.github.com
      端口 443
    
    
      
      
      
    
    AI助手

SSH密钥可以通过SSH代理转发链接进行连接,并非直接在远程服务器上建立联系。这种配置方式使得客户端计算机上的SSH密钥能够实现身份验证功能。值得注意的是,在这种通信过程中,远程服务器充当了中介角色,并未获取任何敏感信息。

你应该使用什么?

问题是值得我们深思的吗?如果像你一样熟悉命令行界面的话,则采用密钥的方法其实非常简便;这是一般人都会采用的一种做法;这一做法不仅简化了配置流程……还避免了频繁输入密码;同样适用于双重因素认证(2FA);对于那些要求极高安全性的Github账户来说则更为必要

如果希望体验简单的话,当您的密码足够安全时,HTTPS就是一种安全的选择.Github默认推荐这一做法是有其原因的——一方面是因为其运行良好;另一方面则是因为易于理解.

全部评论 (0)

还没有任何评论哟~