Git 远程仓库的安全验证——HTTP、SSH

验证方式

对于私有的仓库我们想要进行操作,远程仓库会对我们的身份进行验证:如果没有验证,任何人都可以随意操作仓库是一件非常危险的事情。

目前Git服务器验证手段主要有两种:

  • 方式一:基于HTTP的凭证存储(Credential Storage);
  • 方式二:基于SSH的密钥;

http 凭证

http 无状态连接

为什么http的验证方式叫凭证存储(Credential Storage),而不叫 http 用户名密码验证?

  • 因为本身HTTP协议是无状态的连接。无状态连接的意思就是下一个请求不会记录上一个请求的任何状态。相互完全独立。
  • 比如你去买奶茶,每天一杯,然后奶茶妹妹就对你影响特别深,并在某一天请你喝了一杯奶茶。这个买奶茶就是有状态的,奶茶妹妹对你的印象逐步加深,是因为记住了你之前来过。如果是无状态,那就是奶茶妹妹的记忆力只有七秒,买完就不记得你了。
  • 正因为 http 是无状态的连接,所以为了让服务器认出你,我们需要的是凭证,而用户名密码只是凭证中的一种实现。

并且因为 http 无状态连接的特点,所以每次的请求,我们都需要带上凭证,这很麻烦。
所以为了不让用户点个按钮输入账号密码,再点一次又输入一次账号密码。大家就想方设法在请求中自动携带上凭证或者手动携带上凭证。
自动携带凭证利用的就是 cookie;手动携带凭证的实现就是 token,保存 token,并且在每次的请求头中设置 authorization。

Git 凭证系统

Git 拥有一个凭证系统来处理这个事情,在安装 git 时就会询问你怎么配置凭证系统。

Git Crediential 的选项:

  • 选项一:默认所有都不缓存。 每一次连接都会询问你的用户名和密码;
  • 选项二:“cache” 模式会将凭证存放在内存中一段时间。 密码永远不会被存储在磁盘中,并且在15分钟后从内存中清除;
  • 选项三:“store” 模式会将凭证用明文的形式存放在磁盘中,并且永不过期;
  • 选项四:如果你使用的是 Mac,Git 还有一种 “osxkeychain” 模式,它会将凭证缓存到你系统用户的钥匙串中(加密的);
  • 选项五:如果你使用的是 Windows,需要安装一个叫做 “Git Credential Manager for Windows” 的辅助工具;windows 中默认的凭证配置就是自动安装这个工具。
    • 也可以在 https://github.com/Microsoft/Git-Credential-Manager-for-Windows 中手动下载。

git config credential.helper可查看凭证配置。Windows 中打印为 manager。

SSH 密钥

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。

SSH以非对称加密实现身份验证。

  • 其中一种方法是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录;
  • 另一种方法是人工手动生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录;
    • 公钥需要放在待访问的电脑之中,而对应的私钥需要由用户自行保管;

Git 就是第二种方式手动生成密钥。

  1. 手动生成密钥: ssh-key generate --> ssh-keygen 命令
    1. ed25519 加密算法:ssh-keygen -t ed25519 -C “your email"
    2. RSA 加密算法:ssh-keygen -t rsa -C “your email"
  2. 生成的密钥对
    Git 远程仓库的安全验证——HTTP、SSH_第1张图片
  3. 将公钥(后缀为 public)放入 git 服务器中
    Git 远程仓库的安全验证——HTTP、SSH_第2张图片

你可能感兴趣的:(计算机网络,Git,git,ssh,http,网络安全,github)