git配置远程仓库的认证信息
远程仓库的认证信息是什么?为何需要?
用户在使用 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)是一种加密协议,通过密钥对来进行认证安全认证的,所以不需要输入用户名和密码。
密钥对简述
- 分为公钥和私钥
- 公钥:
- 加密发送信息用的
- 公开的,放在远程仓库上
- 私钥:
- 解密接收信息用的
- 私有的,只存放在用户这边
- 公钥:
密钥认证 工作原理
- 先把git本地公钥放在账户中的ssh key中。
- 当git本地访问远端仓库时,本地会提供密钥,git会拿本地密钥 与 远端仓库平台账户 中的ssh key(公钥) 进行匹配认证(git检查 本地私钥 是否与 远端仓库平台账户的公钥 相匹配)
1. 远程仓库(服务器)随机生成一个随机数用公钥加密后发送给用户(客户端)
2. 客户端接收到数据后用私钥解密为原数据,发送回给远程仓库
3. 远程仓库经过对客户端(git本地)发送来的数据与自己生成的随机数进行对比是否相同,来判断客户端是否有与其公钥匹配的私钥
SSH密钥认证- 特点
- 自动化、便捷
- 配置完之后访问远程仓库就不需要额外手动进行认证了,会自动进行密钥对认证
- 安全性高
SSH密钥-限制
- 唯一账户:一个公钥只能放在该平台其中一个账户中,不能同时放在两个账户中。在添加到第二个账户中时会提示该公钥已经被使用中。
- 解决方法(两种方法):
- 去第一个账户中删除公钥,再去添加到第二个账户中。
- 重新生成密钥公钥对,然后添加到账户的ssh key中。
- 解决方法(两种方法):
- 可以同时拥有多个密钥:如果我们有多个平台及多个账户 或者 通过平台多个账户 时,就需要生成多个密钥对(通过文件名进行标识),把各个公钥放在特定的平台的特定账户中。
git本地 访问 远端仓库 的条件
- 得有该平台的账号,并且该账号需要有该远端仓库的权限
- git本地公钥需要设置在 1.账号中的ssh key中。
配置(Mac电脑)
先得有一对SSH密钥(生成SSH密钥对:都是一对生成的)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- -t rsa: 指定密钥类型为 RSA。
- -b 4096: 指定密钥长度为 4096 位。
- -C “your_email@example.com”: 保持英文双引号,这只是一个个人邮箱标识,不会影响ssh认证的。
按提示操作:
- 按照提示设置密钥文件路径,按回车选择默认路径 (~/.ssh/id_rsa)。 公钥在~/.ssh/id_rsa.pub
- 设置密钥密码(可选),或直接回车跳过。
密钥生成完成后,默认会在 ~/.ssh/ 目录下生成两个文件:
- id_rsa:私钥(不能泄露)。
- id_rsa.pub:公钥(用来添加到 Git 平台)。
添加 SSH 密钥到 SSH 代理
- 为什么需要 SSH 代理?
- 如果没有 SSH 代理,每次进行 SSH 操作时都需要手动指定私钥,或者每次都需要输入私钥的密码。
- 启动代理后,私钥会临时保存在代理中,系统可以在需要时自动使用它,而不需要用户每次输入密码或手动加载。
- SSH代理的作用:
- 临时保存私钥,免去每次操作时输入密码的麻烦操作,SSH代理帮我们自动调用,并确保私钥的安全性。
-
确保 SSH Agent 正在运行:
# 启动SSH代理 eval "$(ssh-agent -s)" -
添加私钥到代理:
ssh-add ~/.ssh/id_rsa -
验证私钥是否成功加载
运行以下命令查看当前已加载的密钥:ssh-add -l
添加 SSH 公钥到远程仓库的用户账号中(Git 平台)
-
查看公钥
cat ~/.ssh/id_rsa.pub复制返回的公钥。
-
在 Git 平台添加公钥(以 GitHub 为例):
- 登录 GitHub。
- 点击右上角头像 -> Settings -> SSH and GPG keys -> New SSH key。
- 将复制的公钥粘贴到 “Key” 输入框,并设置一个标题。
-
测试 SSH 连接是否成功
ssh -T git@github.com # github.com这是域名 # 不同平台域名不同,得把“github.com”换成指定平台的域名 # 例如:https://tegit.sb.com/test/FW_V66 # ssh -T git@tegit.sb.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
1541

被折叠的 条评论
为什么被折叠?



