git如何管理多个ssh keys(github/gitlab)

本文详细介绍了如何在Windows和Linux环境下生成SSH密钥,包括使用ssh-keygen命令生成密钥对,以及如何将公钥添加到GitHub和GitLab账户中。同时,还讲解了如何通过ssh-add命令管理和使用私钥,以及如何测试SSH连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、生成 ssh keys

1、任意目录下右击鼠标选择Git Bash Here或者win+r输入cmd回车打开终端;

2、在该终端下输入命令:

ssh-keygen -t rsa -C "youname@example.com"  -f ~/.ssh/github_rsa:

这时可以一路回车,不输入任何字符,将会在C:\Users\Administrator\.ssh下自动生成github_rsa和github_rsa.pub文件,注意如果不输入-f ~/.ssh/github_rsa,默认会生成id_rsa和id_rsa.pub文件。

注意:双引号换成自己的邮箱,如果linux下遇到权限问题,只需在前面加上sudo。

二、github账号添加ssh keys

1、将id_rsa.pub里面的内容复制下来,在github上的settings里面找到add keys,将其粘贴到key即可,title唯一即可随便填,建议写有意义的。具体过程如图:

2、在控制台上测试一下,输入:

ssh -T git@github.com

只要看到最后一行Hi chenlianjiang! You've successfully authenticated, but GitHub does not provide shell access,说明验证成功了。如下图:

三、gitlib账号添加ssh keys

1、生成 ssh keys

打开终端,终端下输入命令:

ssh-keygen -t rsa -C "youname@example.com" -f ~/.ssh/gitlib_rsa

这时,会在C:\Users\Administrator\.ssh\ 目录下生成gitlab_rsa和gitlab_rsa.pub 文件。

注意这里如果只输入文件名会在终端的当前目录下生成,拷贝到对应位置即可;

2、添加私钥

终端输入一下命令:

$ ssh-add ~/.ssh/github_rsa

$ ssh-add ~/.ssh/gitlab_rsa

 ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中。该命令位置在/usr/bin/ssh-add

如果出现Could not open a connection to your authentication agent.错误提示先执行$ ssh-agent.exe bash,然后执行上面命令;

-D:删除ssh-agent中的所有密钥.

-d:从ssh-agent中的删除密钥

-e pkcs11:删除PKCS#11共享库pkcs1提供的钥匙。

-s pkcs11:添加PKCS#11共享库pkcs1提供的钥匙。

-L:显示ssh-agent中的公钥

-l:显示ssh-agent中的密钥

-t life:对加载的密钥设置超时时间,超时ssh-agent将自动卸载密钥

-X:对ssh-agent进行解锁

-x:对ssh-agent进行加锁

3、添加配置文件

在~/.ssh/目录下新建config文件,并添加如图所示内容:

4、gitlib添加ssh keys

将gitlib_rsa.pub里面的内容复制下来,在gitlib上的账户里面找到所示SSH keys,将其粘贴到key内容即可,Title唯一即可随便填,,点击添加需要输入登录密码;

具体过程如图:

5、在控制台上测试一下,输入:

ssh -T git@域名

只要看到最后一行Welcome to GitLab, chenlj!,说明验证成功了。

 

<think>我们参考了用户提供的引用内容,其中提到的主要错误信息是: remote: HTTP Basic: Access denied Authentication failed for ... 引用[2]中特别指出:可能是密码错误、令牌错误,或者账户启用了双因素认证(2FA)而必须使用个人访问令牌(PAT)代替密码。 因此,解决此问题的核心步骤如下: 1. **确认是否启用双因素认证(2FA)**: 如果启用了2FA,则必须使用个人访问令牌(PAT)代替密码进行认证。 2. **检查用户名和密码/令牌的正确性**: 确保输入的用户名和密码(或令牌)正确无误。注意:GitHub从2021年8月开始不再支持账户密码进行命令行操作,必须使用令牌[^1]。 3. **更新Git凭证存储**: 清除旧的凭证,并重新存储正确的凭证。 具体操作步骤: ### 步骤1:使用个人访问令牌(PAT)代替密码 - 如果尚未创建PAT,请登录GitHub,进入Settings -> Developer settings -> Personal access tokens -> Generate new token。 - 设置权限(scope),对于代码仓库操作,通常需要勾选`repo`权限。 - 生成令牌后,复制并保存(一旦离开页面将无法再次查看)。 **注意**:使用令牌时,用户名就是你的GitHub用户名,密码则是这个令牌。 ### 步骤2:清除旧的Git凭证 - 使用以下命令清除系统级和全局级的凭证存储: ```bash git config --system --unset credential.helper git config --global credential.helper store ``` - 然后删除旧的凭证文件(不同系统位置不同): - Windows: `控制面板 -> 用户账户 -> 管理Windows凭据`,找到对应Git凭据并删除。 - Linux: 删除 `~/.git-credentials` 文件。 - macOS: 使用钥匙串访问(Keychain Access)删除Git相关凭证。 ### 步骤3:重新进行Git操作并输入新的凭证 - 再次执行Git操作(如`git pull`),此时会提示输入用户名和密码。 - 用户名:你的GitHub用户名 - 密码:之前生成的个人访问令牌(PAT) - 如果不想每次输入,可以使用凭证存储: ```bash git config --global credential.helper store ``` 这样,第一次输入后凭证会被保存。 ### 步骤4:检查URL是否正确 - 确保远程仓库的URL格式正确。使用HTTPS协议时,URL格式为: ``` https://github.com/username/repo.git ``` - 如果之前使用过SSH协议,可能需要切换为HTTPS,或者反之(但认证问题通常出现在HTTPS方式)。 ### 步骤5:如果使用IDE(如IntelliJ IDEA) - 在IDE的Git设置中,重新配置认证信息,或者清除缓存并重启IDE。 ### 步骤6:检查是否启用代理 - 如果公司网络使用代理,需要配置Git的代理: ```bash git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:port ``` - 如果不需要代理,可以取消代理设置: ```bash git config --global --unset http.proxy ``` ### 步骤7:检查账户权限 - 确保你的账户有权限访问该仓库。 如果按照以上步骤仍然无法解决,可以尝试使用SSH协议代替HTTPS,具体操作如下: 1. 生成SSH密钥对: ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 2. 将公钥(`~/.ssh/id_rsa.pub`)添加到GitHub账户的SSH keys设置中。 3. 将远程URL修改为SSH格式: ```bash git remote set-url origin git@github.com:username/repo.git ``` 4. 再次尝试操作。 通过以上步骤,应该能够解决HTTP Basic认证失败的问题。 引用来源: [^1]: 用户提供的引用[2]中明确提到双因素认证(2FA)需要使用个人访问令牌(PAT)。 [^2]: 引用[3]提供了清除凭证存储的命令。 如果问题仍然存在,请检查GitHub服务状态或联系版本库管理员。 相关问题: 1. 如何生成GitHub个人访问令牌(PAT)? 2. 如何配置Git使用SSH协议? 3. 如何清除Git保存的凭证? 4. Git代理设置方法有哪些?</think>### 解决 Git 认证失败问题(HTTP Basic Access Denied) 以下是解决 `remote: HTTP Basic: Access denied` 认证错误的完整步骤: --- #### 1. **确认账户状态** [^1][^2] - 检查是否启用**双因素认证(2FA)**: - 若启用必须使用**个人访问令牌(PAT)**代替密码 - 创建令牌:GitHub → Settings → Developer settings → Personal access tokens → Generate new token - 权限勾选:`repo`(完整仓库控制)、`workflow`(操作工作流) #### 2. **清除缓存凭证** [^3] ```bash # 清除系统级凭证配置 git config --system --unset credential.helper # 清除全局级凭证存储 git config --global --unset credential.helper # 删除凭证文件(位置因系统而异) rm ~/.git-credentials # Linux/macOS del %USERPROFILE%\.git-credentials # Windows ``` #### 3. **更新凭证存储方式** ```bash # 启用安全凭证存储 git config --global credential.helper store # 强制重新认证(执行后会提示输入凭证) git pull ``` 输入凭证时: - 用户名:GitHub 用户名 - 密码:**个人访问令牌**(不是账户密码) #### 4. **检查远程URL格式** ```bash git remote -v # 查看当前配置 # 修正URL格式(使用PAT) git remote set-url origin https://<USERNAME>:<PAT>@github.com/username/repo.git ``` #### 5. **代理环境特殊处理** 若在公司代理环境下: ```bash # 取消全局代理设置 git config --global --unset http.proxy # 或配置代理认证 git config --global http.proxy http://user:password@proxy:port ``` #### 6. **IDE额外配置(如IntelliJ)** 1. File → Settings → Version Control → Git 2. 取消勾选 `Use credential helper` 3. 重新输入用户名和PAT 4. 清除IDE缓存:File → Invalidate Caches --- ### 关键要点总结 | 问题原因 | 解决方案 | |---------|----------| | 双因素认证(2FA)启用 | 必须使用个人访问令牌(PAT) | | 凭证缓存过期 | 清除 `git-credentials` 文件 | | URL包含特殊字符 | 避免在URL直接写密码,使用凭证存储 | | 代理配置冲突 | 取消或修正 `http.proxy` 设置 | | IDE凭证缓存 | 在IDE设置中清除认证数据 | > **注意**:GitHub 自 2021 年 8 月起[不再支持账户密码进行命令行操作](https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/),必须使用 PAT[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值