验证方式
对于私有的仓库我们想要进行操作,远程仓库会对我们的身份进行验证:如果没有验证,任何人都可以随意操作仓库是一件非常危险的事情。
目前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 就是第二种方式手动生成密钥。
- 手动生成密钥: ssh-key generate --> ssh-keygen 命令 1. ed25519 加密算法:
ssh-keygen -t ed25519 -C “your email"
2. RSA 加密算法:ssh-keygen -t rsa -C “your email"
- 生成的密钥对
- 将公钥(后缀为 public)放入 git 服务器中
版权归原作者 卡列尼娜翠花 所有, 如有侵权,请联系我们删除。