热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Git多账号多SSH密钥配置指南

本指南详细介绍了如何在同一台计算机上配置多个GitHub账户,并使用不同的SSH密钥进行身份验证,确保每个账户的安全性和独立性。

本文提供者陈云峰,欢迎分享,但请注明出处。

Git多账号多SSH密钥配置指南

问题背景


GitHub通过SSH协议与客户端建立安全连接。对于单一用户,生成一对SSH密钥后,将公钥上传至GitHub,每次连接时,SSH客户端会自动使用本地存储的私钥(默认路径为~/.ssh/id_rsa)进行身份验证。这种情况下,服务器上的公钥与客户端的私钥是匹配的,因此能够顺利通过验证。

然而,在多用户场景下(如user1和user2),当尝试连接user2的账户时,尽管user2已在GitHub上保存了自己的公钥,但SSH客户端仍然默认发送user1的私钥,导致验证失败。为了支持多账号下的SSH密钥切换,可以通过配置客户端来解决这一问题。


解决方案


生成和配置新的SSH密钥

首先,打开终端并切换到~/.ssh目录:

cd ~/.ssh

接着,生成一个新的SSH密钥,例如命名为id_rsa_user2:

ssh-keygen -t rsa -C 'user2@mail.com'

生成后,将新生成的SSH公钥添加到GitHub账户的SSH密钥设置中。由于默认SSH仅读取id_rsa,为了使SSH识别新的私钥,需要将其添加到SSH代理中:

ssh-add ~/.ssh/id_rsa_user2

若遇到错误提示“Could not open a connection to your authentication agent”,请先运行eval `ssh-agent -s`启动SSH代理,再执行上述命令。

编辑SSH配置文件

完成上述步骤后,在~/.ssh目录下创建或编辑config文件,以配置不同私钥对应的服务器。示例配置如下:

# 默认GitHub用户(user1@mail.com)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# 第二个用户(user2@mail.com)

Host github-user2
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_user2

这里的Host名称可以自定义,便于记忆和区分,同时在后续添加远程仓库时也会用到。

更新Git项目的远程地址

配置完成后,对于非默认账户的GitHub仓库,需要更新其远程地址以指向正确的Host。例如,若要添加user2账户下的test仓库,应使用如下命令:

git remote add test git@github-user2:user2/test.git

而非原来的git@github.com:user2/test.git。这样,每次连接都将使用id_rsa_user2与服务器进行通信。

调整Git提交者的邮箱

重要提示:GitHub根据配置文件中的user.email属性来确定提交者的身份信息。因此,在多账号环境中,务必根据当前使用的账户更改user.email。可以通过全局设置或针对特定项目进行设置:

全局设置:

git config --global user.email "user2@mail.com"

项目特定设置:

cd test
git config user.email "user2@mail.com"


参考资料


本文提供者陈云峰,欢迎分享,但请注明出处。


推荐阅读
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文详细介绍如何通过设置SSH密钥来获取连接GitHub远程仓库的权限,包括生成密钥、添加到GitHub账户以及验证连接等步骤。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • npm run dev后报错 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • HTTPS与TLS/SSL协议详解:握手及记录协议
    HTTPS,即HTTP over TLS/SSL,通过在HTTP通信层引入安全协议,确保数据传输的安全性。本文将深入探讨TLS/SSL协议的基本概念、HTTPS的必要性,以及TLS握手和记录协议的工作原理。 ... [详细]
author-avatar
残破的前进
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有