git配置远程仓库的认证信息
git配置远程仓库的认证信息
- 远程仓库的认证信息是什么?为何需要?
- 如果不配置认证信息的话
- 配置认证信息的方式有哪些?
- 用户名和密码
- Git 凭证助手(Credential Helper)
- SSH密钥认证
- 使用主机认证信息的配置文件~/.netrc
远程仓库的认证信息是什么?为何需要?
用户在使用 Git 与远程仓库交互(比如:从远程仓库拉取/推送代码)时,远程仓库需要验证用户身份信息(不然岂不是谁都可以拉取代码了)来控制用户对远程仓库的访问权限,而这个身份信息就是认证信息。
如果不配置认证信息的话
如果我们不配置认证信息的话,每次拉取代码时,git就会默认采用用户名和密码的方式来进行认证:git都会让用户输入用户名和密码,但是拉取/推送操作是个挺频繁的操作,所以不配的话,你会😡的。
配置认证信息的方式有哪些?
Git 支持多种方式来配置和管理认证信息,常见的远程仓库认证方式:
- 用户名和密码
- SSH 密钥、
- 令牌(如 GitHub 的 PAT)
- 凭证管理器等
根据安全需求和便捷性需求,选择适合的认证方式能够有效提升工作效率,且能确保安全性。
下面分别详细讲讲一些配置认证信息的方式。
用户名和密码
这是最传统的认证方式,尤其适用于早期git服务。
特点
- 繁琐
- 每次访问远程仓库都给输入一次
- 安全性低
配置方法
- 方法1
- 当使用HTTP/HTTPS协议访问远程仓库时,Git会要求用户输入用户名和密码来进行认证身份
- 方法2
- 直接在 URL 中嵌入用户名和密码
git clone https://<username>:<password>@github.com/YourRepo.git
- 直接在 URL 中嵌入用户名和密码
Git 凭证助手(Credential Helper)
Git 提供了一种凭证管理工具 credential helper,可以将 HTTPS 凭证缓存到内存中,或存储到磁盘中,从而避免每次都重新输入用户名和 PAT。
Git credential helper 支持多种存储方式,包括:
-
cache:将凭证 临时 缓存到内存当中(默认15分钟)
- Git 支持在本地缓存用户名和密码,缓存时间默认为 15 分钟,可通过以下命令设置:
git config --global credential.helper cache git config --global credential.helper 'cache --timeout=3600' # 设置缓存时间为 1 小时
- 如果需要清除已缓存的认证信息,可以运行:
git credential-cache exit
- Git 支持在本地缓存用户名和密码,缓存时间默认为 15 分钟,可通过以下命令设置:
-
store:将凭证永久保存在纯文本文件(~/.git-credentials)
git config --global credential.helper store
执行上述命令后,在下一次需要认证时输入用户名和密码,Git 会将其保存到 ~/.git-credentials 文件中
-
manager:在windows或mac系统上使用原生的Git Credential Manager 来安全存储和管理凭证。
git config --global credential.helper manager
SSH密钥认证
SSH(Secure Shell)是一种加密协议,通过密钥对来进行认证安全认证的,所以不需要输入用户名和密码。
密钥对简述
- 分为公钥和私钥
- 公钥:
- 加密发送信息用的
- 公开的,放在远程仓库上
- 私钥:
- 解密接收信息用的
- 私有的,只存放在用户这边
- 公钥:
- 工作原理
- 当用户访问远端仓库时,远程仓库对用户进行认证(远程仓库检查用户是否有与其公钥相匹配的私钥)
- 远程仓库(服务器)随机生成一个随机数用公钥加密后发送给用户(客户端)
- 客户端接收到数据后用私钥解密为原数据,发送回给远程仓库
- 远程仓库经过对客户端发送来的数据与自己生成的随机数进行对比是否相同,来判断客户端是否有与其公钥匹配的私钥
- 当用户访问远端仓库时,远程仓库对用户进行认证(远程仓库检查用户是否有与其公钥相匹配的私钥)
特点
- 自动化、便捷
- 配置完之后访问远程仓库就不需要额外手动进行认证了,会自动进行密钥对认证
- 安全性高
配置
-
先得有一对SSH密钥(生成SSH密钥对)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按照提示设置密钥文件路径(默认是 /.ssh/id_rsa)和可选的密码保护。公钥在/.ssh/id_rsa.pub
-
添加 SSH 公钥到远程仓库
# 查看公钥 cat ~/.ssh/id_rsa.pub
在 GitHub 或其他平台的「SSH 设置」中添加公钥。
-
测试 SSH 连接是否成功
ssh -T git@github.com
如果配置成功,您应该会看到类似以下的消息:Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.
-
使用SSH URL克隆远程仓库
git clone git@github.com:username/repo.git
使用主机认证信息的配置文件~/.netrc
一个用于存储主机认证信息的配置文件,主要在命令行环境中自动化身份验证。
其作用是通过预先配置主机名、用户名和密码等信息,使得与远程服务交互时无需输入凭证,自动进行身份验证。
通过在 .netrc 中设置这些信息,命令行工具能够在没有用户干预的情况下访问这些服务。
这对于自动化任务、批处理作业,或者频繁访问需要认证的远程服务非常有用。
.netrc 文件的基本格式,通常包括以下元素:
- machine: 主机名或服务域名(如 github.com)。
- login: 用于登录该主机的用户名。
- password: 对应的密码或者身份验证令牌(如 GitHub 的个人访问令牌)。
配置方式
直接通过编辑该文件来实现
如果文件不存在的话,自己创建一个
示例:
.netrc 文件配置了两个主机的认证信息
# 对于 github.com,用户名是 my-username,密码是 my-password
machine github.com
login my-username
password my-password
# 对于 example.com,用户名是 my-user,密码是 my-secret-password
machine example.com
login my-user
password my-secret-password