用户在使用 Git 与远程仓库交互(比如:从远程仓库拉取/推送代码)时,远程仓库需要验证用户身份信息(不然岂不是谁都可以拉取代码了)来控制用户对远程仓库的访问权限,而这个身份信息就是认证信息。
如果我们不配置认证信息的话,每次拉取代码时,git就会默认采用用户名和密码的方式来进行认证:git都会让用户输入用户名和密码,但是拉取/推送操作是个挺频繁的操作,所以不配的话,你会的。
Git 支持多种方式来配置和管理认证信息,常见的远程仓库认证方式:
根据安全需求和便捷性需求,选择适合的认证方式能够有效提升工作效率,且能确保安全性。
下面分别详细讲讲一些配置认证信息的方式。
这是最传统的认证方式,尤其适用于早期git服务。
特点
配置方法
git clone https://<username>:<password>@github.com/YourRepo.git
Git 提供了一种凭证管理工具 credential helper,可以将 HTTPS 凭证缓存到内存中,或存储到磁盘中,从而避免每次都重新输入用户名和 PAT。
Git credential helper 支持多种存储方式,包括:
cache:将凭证 临时 缓存到内存当中(默认15分钟)
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600' # 设置缓存时间为 1 小时
git credential-cache exit
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(Secure Shell)是一种加密协议,通过密钥对来进行认证安全认证的,所以不需要输入用户名和密码。
SSH密钥认证- 特点
SSH密钥-限制
git本地 访问 远端仓库 的条件
ssh-keygen -t rsa -b 4096 -C "[email protected]"
按提示操作:
密钥生成完成后,默认会在 ~/.ssh/ 目录下生成两个文件:
确保 SSH Agent 正在运行:
# 启动SSH代理
eval "$(ssh-agent -s)"
添加私钥到代理:
ssh-add ~/.ssh/id_rsa
验证私钥是否成功加载
运行以下命令查看当前已加载的密钥:
ssh-add -l
查看公钥
cat ~/.ssh/id_rsa.pub
复制返回的公钥。
在 Git 平台添加公钥(以 GitHub 为例):
测试 SSH 连接是否成功
ssh -T [email protected]
# github.com这是域名
# 不同平台域名不同,得把“github.com”换成指定平台的域名
# 例如:https://tegit.sb.com/test/FW_V66
# ssh -T [email protected]
如果配置成功,您应该会看到类似以下的消息:Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.
使用SSH URL克隆远程仓库
git clone [email protected]:username/repo.git
一个用于存储主机认证信息的配置文件,主要在命令行环境中自动化身份验证。
其作用是通过预先配置主机名、用户名和密码等信息,使得与远程服务交互时无需输入凭证,自动进行身份验证。
通过在 .netrc 中设置这些信息,命令行工具能够在没有用户干预的情况下访问这些服务。
这对于自动化任务、批处理作业,或者频繁访问需要认证的远程服务非常有用。
.netrc 文件的基本格式,通常包括以下元素:
配置方式
直接通过编辑该文件来实现
如果文件不存在的话,自己创建一个
示例:
.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