使用多个 GitHub 账号的 SSH 配置与常见问题排查
文章目录
- 使用多个 GitHub 账号的 SSH 配置与常见问题排查
- 摘要
- 目录
- 1. 使用多个 GitHub 账号的场景介绍
- 2. 配置多个 SSH 密钥
- 2.1 生成多个 SSH 密钥
- 2.2 添加 SSH 密钥到 SSH 代理
- 2.3 将 SSH 公钥添加到 GitHub 账户
- 3. 配置 SSH 代理与 GitHub 账户的关联
- 3.1 为不同仓库设置不同的 GitHub 账号
- 4. SSH 连接 GitHub 时常见错误排查
- 4.1 问题 1:`Connection closed by 198.18.0.35 port 22`
- 4.2 问题 2:`Permission denied (publickey)`
- 4.3 问题 3:`Host key verification failed`
- 5. 总结
使用多个 GitHub 账号的 SSH 配置与常见问题排查
摘要
在开发过程中,可能会涉及到多个 GitHub 账号的使用。为了避免每次切换账号时手动输入用户名和密码,我们可以通过配置多个 SSH 密钥来管理这些账号。本文将详细介绍如何为每个 GitHub 账号生成独立的 SSH 密钥、如何配置 SSH 代理、以及在使用 SSH 连接克隆仓库时遇到的常见错误及其解决方案。
目录
- 使用多个 GitHub 账号的场景介绍
- 配置多个 SSH 密钥
- 配置 SSH 代理与 GitHub 账户的关联
- SSH 连接 GitHub 时常见错误排查
- 总结
1. 使用多个 GitHub 账号的场景介绍
在日常开发中,可能有以下场景需要使用多个 GitHub 账号:
- 工作与个人项目分离:你可能有一个工作账号用于公司项目管理,还有一个个人账号用于自己的开源项目或其他私有项目管理。
- 多重身份管理:不同的组织或团队可能要求你使用不同的 GitHub 账号来管理项目。
为了简化这些场景中的账户切换和管理,我们可以通过 SSH 配置,让每个仓库使用特定的 GitHub 账号而无需反复输入密码或切换登录状态。
2. 配置多个 SSH 密钥
2.1 生成多个 SSH 密钥
每个 GitHub 账号需要一个独立的 SSH 密钥。通过 ssh-keygen
命令为每个账号生成密钥,并指定不同的文件名。
为第一个 GitHub 账号生成密钥:
ssh-keygen -t rsa -b 4096 -C "your-email-for-account1@example.com"
命令执行后,它会提示你输入文件名,保存路径可以为:
/home/your-username/.ssh/id_rsa_account1
同样,为第二个账号生成另一个密钥:
ssh-keygen -t rsa -b 4096 -C "your-email-for-account2@example.com"
保存路径可以为:
/home/your-username/.ssh/id_rsa_account2
2.2 添加 SSH 密钥到 SSH 代理
接下来,需要启动 SSH 代理并将生成的密钥添加到代理中。
启动 SSH 代理:
eval "$(ssh-agent -s)"
然后将每个密钥添加到代理中:
ssh-add ~/.ssh/id_rsa_account1
ssh-add ~/.ssh/id_rsa_account2
2.3 将 SSH 公钥添加到 GitHub 账户
在 GitHub 网站上,将每个公钥分别添加到对应的 GitHub 账户中。
- 打开终端并查看公钥内容:
cat ~/.ssh/id_rsa_account1.pub
-
将显示的内容复制,然后登录到第一个 GitHub 账号:
- 进入 Settings -> SSH and GPG keys。
- 点击 New SSH key,粘贴公钥并保存。
-
对第二个账号执行相同的操作,将
~/.ssh/id_rsa_account2.pub
添加到 GitHub。
3. 配置 SSH 代理与 GitHub 账户的关联
为了让 Git 在克隆和操作时能够正确选择相应的 SSH 密钥,我们需要通过 SSH 配置文件(~/.ssh/config
)来为每个 GitHub 账号设置特定的 Host
。
编辑 ~/.ssh/config
文件,添加以下内容:
# Account 1
Host github-account1HostName github.comUser gitIdentityFile ~/.ssh/id_rsa_account1# Account 2
Host github-account2HostName github.comUser gitIdentityFile ~/.ssh/id_rsa_account2
这样,Git 在访问 github-account1
或 github-account2
时,会使用相应的密钥进行身份验证。
3.1 为不同仓库设置不同的 GitHub 账号
在克隆仓库时,指定相应的 Host 名称。例如,克隆第一个账户下的仓库时:
git clone git@github-account1:username/repo.git
对于第二个账户:
git clone git@github-account2:username/repo.git
通过这种方式,你可以轻松管理多个 GitHub 账号,避免反复输入用户名和密码。
【注意⚠️】:
- 上述使用的是:git@github-account1 和 git@github-account2。而不是 github.com;
- 不能使用 github.com,要使用在 config 文件中
Host xxx.com
后面的xxx.com
进行拉取文件。
所以我在config文件中,把账户1设置为 github.com
,账户2设置为 github_account2.com
。
这样账户1在clone仓库时,可以直接clone。
账户2需要把url修改为git@github-account2
才能clone文件。
下述是我配置的config
文件:
# Account 1
Host github.comHostName ssh.github.comUser gitIdentityFile ~/.ssh/id_rsaPort 443# Account 2
Host github_account2.comHostName ssh.github.comUser gitIdentityFile ~/.ssh/daiyuPort 443
4. SSH 连接 GitHub 时常见错误排查
4.1 问题 1:Connection closed by 198.18.0.35 port 22
当尝试通过 SSH 克隆仓库时,可能会遇到类似如下的错误信息:
Connection closed by 198.18.0.35 port 22
fatal: Could not read from remote repository.
原因分析:这个问题通常与网络配置或 SSH 配置不当有关。可能是由于网络环境阻止了端口 22 的 SSH 连接,或者密钥文件没有正确配置。
解决方法:
- 使用端口 443 进行 SSH 连接:在某些受限的网络环境中,端口 22 可能被防火墙阻止。GitHub 提供了备用的
ssh.github.com
,可以通过端口 443 连接。
编辑 ~/.ssh/config
,将 HostName
修改为 ssh.github.com
并指定使用端口 443:
Host github.comHostName ssh.github.comUser gitIdentityFile ~/.ssh/id_rsaPort 443
保存后再尝试克隆:
git clone git@github.com:username/repo.git
- 检查 SSH 代理:确保 SSH 代理已正确启动,并且密钥已经加载:
ssh-add -l
如果没有密钥,执行:
ssh-add ~/.ssh/id_rsa
- 确认 GitHub 中是否添加了正确的公钥:确保你已经将正确的 SSH 公钥添加到 GitHub。
4.2 问题 2:Permission denied (publickey)
如果遇到 Permission denied (publickey)
错误,说明 SSH 密钥未被正确识别。这可能是由于密钥未添加到 SSH 代理,或是密钥没有添加到 GitHub 账户。
解决方法:
- 使用
ssh-add ~/.ssh/id_rsa
添加私钥。 - 检查是否正确添加了公钥到 GitHub 账户。
4.3 问题 3:Host key verification failed
当 Host key verification failed
错误出现时,可能是 GitHub 的主机密钥发生了变更。
解决方法:
使用以下命令清除缓存的 GitHub 主机密钥:
ssh-keygen -R github.com
然后重新尝试连接:
ssh -T git@github.com
5. 总结
通过正确配置 SSH,可以在同一台电脑上同时使用多个 GitHub 账号,无需反复切换或输入密码。关键在于为每个账号生成独立的 SSH 密钥,并通过 ~/.ssh/config
配置文件进行管理。此外,克隆仓库时遇到的常见连接问题大多可以通过修改 SSH 配置或使用备用端口(443)来解决。希望本文能帮助你更好地管理多个 GitHub 账号,并轻松解决 SSH 连接中的问题。
相关文章:
使用多个 GitHub 账号的 SSH 配置与常见问题排查
文章目录 使用多个 GitHub 账号的 SSH 配置与常见问题排查摘要目录1. 使用多个 GitHub 账号的场景介绍2. 配置多个 SSH 密钥2.1 生成多个 SSH 密钥2.2 添加 SSH 密钥到 SSH 代理2.3 将 SSH 公钥添加到 GitHub 账户 3. 配置 SSH 代理与 GitHub 账户的关联3.1 为不同仓库设置不同…...
sql语法学习
学习 SQL(Structured Query Language)语法是数据库开发的基础,主要用于数据库的管理和操作。以下是 SQL 的基本语法和常用操作,涵盖数据查询、插入、更新、删除等。 1. 数据库基础 数据库:存储表和数据的集合。表&am…...
滚雪球学SpringCloud[5.3讲]: 配置管理中的高可用与容错
全文目录: 前言高可用配置中心的搭建为什么需要高可用配置中心?多实例与负载均衡数据一致性实战示例:使用Nginx实现高可用配置中心 Spring Cloud Config中的高可用性高可用性的进一步优化 配置管理中的故障处理策略分布式系统中的常见故障故障…...
电商安全新挑战:筑起数字防御长城,守护业务与数据安全
在当今这个数字化时代,电商行业正以前所未有的速度发展,大数据、人工智能等技术的融入不仅重塑了消费模式,更激发了行业新的增长点。然而,这片繁荣景象之下,隐藏着一个不容忽视的暗流——网络安全威胁。从数据泄露到恶…...
Python 单元测试:深入理解与实战应用20240919
Python 单元测试:深入理解与实战应用 引言 在动态语言如 Python 中,代码的灵活性和动态特性使得开发效率大大提升,但也带来了潜在的风险:小的改动可能导致不可预见的功能失效。因此,确保代码逻辑的正确性和稳健性至关…...

二、MySQL环境搭建
文章目录 1. MySQL的卸载步骤1:停止MySQL服务步骤2:软件的卸载步骤3:残余文件的清理步骤4:清理注册表(选做)步骤5:删除环境变量配置 2. MySQL的下载、安装、配置2.1 MySQL的4大版本2.2 软件的下…...
mongoDB 读取数据python版本实现
要使用Python从MongoDB读取数据,你可以使用pymongo库。首先确保你已经安装了pymongo,如果没有安装,可以通过pip来安装它: pip install pymongo 接下来,我将展示如何使用给定的MongoDB连接字符串来连接数据库ÿ…...
java Nio的应用
Java NIO(New Input/Output)是Java 1.4引入的一种非阻塞I/O模型,适用于高性能和高并发的应用程序。以下是NIO的一些主要应用场景和特点: 1. 非阻塞I/O NIO支持非阻塞模式,这意味着线程可以在I/O操作进行时继续执行其…...

双十一有什么好物推荐?值得入手的五款产品
随着双十一狂欢的号角日益临近,这个一年一度的购物盛典即将拉开帷幕!为了让大家在海量的商品中精准定位,圆圆用心整理了一份购物清单,分享那些我亲身试用过,觉得超级值得购买的好物。 这些商品不但价格亲民࿰…...

Nuxt Kit 使用日志记录工具
title: Nuxt Kit 使用日志记录工具 date: 2024/9/23 updated: 2024/9/23 author: cmdragon excerpt: 摘要:本文介绍在Nuxt 3框架的Nuxt Kit中使用日志记录工具的方法,重点讲解useLogger函数的应用,通过创建示例项目一步步展示如何配置和使用日志记录功能来监控应用状态、…...
视频相关处理
1、概念 (1)FPS 是 “Frames Per Second” 的缩写,意思是“每秒帧数”。它表示每秒钟屏幕上显示的图像帧数,用来衡量动画、视频或游戏画面的流畅度。 FPS 越高,画面越流畅,通常来说,30 FPS 被认为是基本流畅,60 FPS 及以上则非常顺滑。FPS 过低 会导致画面卡顿,尤其是…...

关于循环Socket创建超Linux文件句柄限制现象分析
项目场景: 在操作系统的世界中万物皆文件。之前拜读过一些作品:针对于socket的创建,Linux也相应创建文件(专业术语中也称文件句柄),于是,我想做一些关于极限的操作,看看这些极限操作…...
简单说说MySQL中 SELECT 语句执行流程
流程讲解 MySQL 中 SELECT 语句的执行流程分为多个步骤,通常从用户发出查询请求到 MySQL 返回结果包含以下过程: 客户端/服务器通信: 用户向 MySQL 服务器发送 SELECT 查询语句。 查询解析(Parser): MySQ…...
国产游戏技术:迈向全球引领者的征途
目录 国产游戏技术能否引领全球? 一、国产游戏技术的崛起之路 1.1 初期探索与积累 1.2 技术创新的加速 1.3 文化自信的体现 二、国产游戏技术的核心竞争力 2.1 本地化与定制化策略 2.2 技术创新与应用 2.3 产业链协同与生态构建 三、面临的挑战与应对策略…...

小程序体验版无法正常请求接口,开启 调试可以正常请求
在本地开发工具可以正常访问小程序,上传代码后打开体验版,界面无法请求接口,手机小程序打开调试模式可以正常访问。这可以查看下小程序后台是否设置了服务器域名以及业务域名 然后查看小程序开发工具 - 详情 - 项目配置 重新上传代码…...

什么是动态数据脱敏?
原文地址 https://www.bytebase.com/blog/what-is-dynamic-data-masking/ 动态数据脱敏(DDM)动态更改返回给应用程序或用户的数据库记录,以此来实时保护敏感数据,且不会更改静态数据。 DDM 与静态数据脱敏(SDM&#x…...

【机器学习】11——矩阵求导
机器学习11——矩阵求导 打公式不太好标注,全图警告!!! 文章目录 机器学习11——矩阵求导1.1标量对向量1.2标量对矩阵2.1向量对标量2.2向量对向量2.3向量对矩阵 1.1标量对向量 1.2标量对矩阵 X是m*n的矩阵,不严谨&am…...
Spring Boot 实战:结合策略模式实现动态定价服务
引言 在现代商业环境中,价格策略的灵活性对于吸引客户和提高市场竞争力至关重要。传统的定价方法往往固定不变,而随着市场的变化和技术的发展,能够根据不同的条件和场景来调整价格的动态定价策略变得越来越重要。Spring Boot 框架以其简洁的…...
Serverless架构
Serverless架构:漂浮在云端的轻盈与自由 类似于 Fn Project 的 Serverless 开源服务有很多,它们都旨在简化函数即服务(FaaS)的开发流程,使得开发者可以更专注于业务逻辑而不是底层基础设施。下面列举了一些知名的 Serverless 开源平台和服务…...

9.20日学习记录及相关问题解答
部分一 今天看了一本古老的书。学到了一些有关计算机的远古的知识。弥补了一些之前没有意识到的空白点。 原来上个世纪就有AI这个东西了 现阶段的主流模式,在许多年前其实是将来要发展的对象。 B/S指的是客户机/服务器结构模式 C/S是在B/S基础上发展过来的。三层结…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...