当前位置: 首页 > news >正文

使用多个 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 连接克隆仓库时遇到的常见错误及其解决方案。


目录
  1. 使用多个 GitHub 账号的场景介绍
  2. 配置多个 SSH 密钥
  3. 配置 SSH 代理与 GitHub 账户的关联
  4. SSH 连接 GitHub 时常见错误排查
  5. 总结

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 账户中。

  1. 打开终端并查看公钥内容:
cat ~/.ssh/id_rsa_account1.pub
  1. 将显示的内容复制,然后登录到第一个 GitHub 账号:

    • 进入 Settings -> SSH and GPG keys
    • 点击 New SSH key,粘贴公钥并保存。
  2. 对第二个账号执行相同的操作,将 ~/.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-account1github-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连接字符串来连接数据库&#xff…...

java Nio的应用

Java NIO(New Input/Output)是Java 1.4引入的一种非阻塞I/O模型,适用于高性能和高并发的应用程序。以下是NIO的一些主要应用场景和特点: 1. 非阻塞I/O NIO支持非阻塞模式,这意味着线程可以在I/O操作进行时继续执行其…...

双十一有什么好物推荐?值得入手的五款产品

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

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 产业链协同与生态构建 三、面临的挑战与应对策略…...

小程序体验版无法正常请求接口,开启 调试可以正常请求

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

什么是动态数据脱敏?

原文地址 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基础上发展过来的。三层结…...

【网络安全】依赖混淆漏洞实现RCE

未经许可,不得转载。 文章目录 正文 依赖混淆是一种供应链攻击漏洞,发生在企业的内部依赖包错误地从公共库(如npm)下载,而不是从其私有注册表下载。攻击者可以在公共注册表中上传一个与公司内部包同名的恶意包&#xf…...

FC优化配置

1.集群扩容CNA时打开bmc 2.给rhel7虚拟机安装tools-需要重启虚拟机 3.FC上创建集群 资源池右击创建集群(物理机大于10台,分业务类型创建集群) (解决集群内主机挂了,动态调整) (解决集群内个别…...

文件防泄漏方法有哪些|6个方法有效防止文件泄密

文件防泄漏是企业和组织保护其敏感信息和核心资产的重要手段。 以下是六个有效防止文件泄密的方法: 1. 文件加密 透明加密:使用专业的防泄密软件,如安企神等,对敏感文件进行透明加密处理。 这种加密方式在用户创建、编辑和保存…...

云盘还安全么?阿里云盘出现BUG,惊现大量陌生人照片

近日,网友称,阿里云盘出现“BUG”。网友表示,在阿里云盘的相册中,只要创建一个新的文件夹,就可以看到其他用户的照片。 记者从反映问题的相关视频中看到,一名用户在阿里云盘的相册功能中,创建了…...

蘑菇成熟待收检测系统源码分享

蘑菇成熟待收检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…...

基于单片机的智能小车的开发与设计

摘要:本文论述了基于 STC89C52 单片机的智能小车的开发与设计过程。该设计采用单片机、电机驱动及光电循迹等技术,保证小车在无人管理状态下,能按照预先设定的线路实现自动循迹功能。在电路结构设计中力求方便,可操作,…...

解决 GitLab CI/CD 中的 `413 Request Entity Too Large` 错误

解决 GitLab CI/CD 中的 413 Request Entity Too Large 错误 在使用 GitLab CI/CD 时,我们可能会遇到 413 Request Entity Too Large 的错误提示。通常,这是因为 GitLab Runner 在上传工件(artifacts)到 GitLab 服务器时&#xf…...

Java项目实战II基于Java+Spring Boot+MySQL的洗衣店订单管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 随着生活节奏的加快,现代人对便捷、高效服务的需求日益增长,洗衣店作为日常生…...

Can‘t connect to local MySQL server through socket

mysql -uroot ERROR 2002 (HY000): Cant connect to local MySQL server through socket /tmp/mysql.sock (2)这是mysql登录时找不到套接字的问题。 首先需要明白的是,Linux端的mysql server启动时会开启一个socket,Linux上的MySQL的客户端在不使用IP连…...

【车载以太网】【SOME/IP】Wireshark 解析

目录 ​​​​​​​Wireshark 官方插件 相关代码: 启用协议插件 Lua插件 测试数据包 Wireshark 下载链接:Wireshark Go DeepSOMEIP插件介绍:https://www.wireshark.org/docs/dfref/s/someip.html官方插件 Wireshark从3.2版本开始支持SOME/IP,启用相应的插件即可以…...