在公司开发中,有时候会存在公司账户跟私人账户共存,并随时需要切换的情况,这种情况下git可以配置多个ssh-key,无缝切换账号。

假如有两个github账号,一个是私人github账号,一个是公司github账号

私人账号:

  • github用户名:my
  • email:convict@qq.com

公司账号:

  • github用户名:company
  • email:convict.yellow@work.com

一、在用户目录下的.ssh目录下生成秘钥公钥

如果用户目录下没有.ssh目录,则需要新建一个

cd ~/.ssh
ssh-keygen -t rsa -f id_rsa_my
ssh-keygen -t rsa -f id_rsa_company

一路回车即可

  • 注:国内很多博客都会带上-C "xxx邮箱" 这个参数,但其实-C 参数是用来做秘钥注释的,以便知道这个秘钥到底是干嘛的。填个邮箱进去可以当成是备注,但不是必须,你也可以填个我是世界首富

上面ssh-keygen 命令参数:

  • -t: 指定生成rsa 类型秘钥
  • -f: 指定生成秘钥的名字,可以不指定该参数,默认就会生成2个文件:私钥id_rsa,公钥id_rsa.pub。由于需要生成两对私钥公钥,因此需要指定-f,否则生成两次后,私钥公钥会覆盖

上面的命令调用完后会生成四个文件:

  • id_rsa_my
  • id_rsa_my.pub
  • id_rsa_company
  • id_rsa_company.pub

二、将公钥配置到对应的github账号中

公钥.pub文件可以直接用文本打开,内容粘贴到github的 Settings -> SSH and GPG keys -> New SSH Key,Title随便起,自己能认出来即可,Key里面填写复制的.pub里的内容,这样公钥就配置好了

三、创建config文件

.ssh目录下创建config 文件,git通过这个文件才知道哪个私钥去对应哪个公钥

touch config

config文件内容:

# my
Host my
HostName github.com
IdentityFile ~/.ssh/id_rsa_my # company
Host company
HostName github.com
IdentityFile ~/.ssh/id_rsa_company

config文件部分参数含义,仅做记录

# Host: 主机别名
# HostName: 托管平台域名地址,如github.com
# IdentityFile: 该Host私钥文件
# User: 托管平台用户名
# Port: 端口号,可不填(如果不是默认22号端口则需要指定)
# PreferredAuthentications publickey

四、测试ssh-key是否连通

ssh -T git@my
ssh -T git@company

成功的情况下会返回:

Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.

此时私钥公钥 都配置正常了

五、测试clone不同github仓库

此时测试一下clone私人git仓库,必须使用SSH链接

SSH链接格式为:

git@github.com:用户名/仓库名.git

比如下面例子:

git@github.com:convict/my-repo.git

要clone这个仓库,需要进行改动,应使用:

git clone git@my:convict/my-repo.git

即把github.com 换成my,此时clone成功,同理需要clone公司账户下的仓库,需要把github.com 换成company即可

如果直接使用复制下来的链接git clone git@github.com:convict/my-repo.git,会clone失败:

Cloning into 'test'...
Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository. Please make sure you have the correct access rights
and the repository exists.

解释:

  1. 在SSH中,@:之间就是Host,因此在git clone git@github.com:convict/my-repo.git中,Host就是github.com,但在前面配置的config文件中,指定了两个Host,分别为mycompany,而没有一个加github.com的Host!这是尤其需要注意的。
  2. 使用git clone git@my:convict/my-repo.git时,会在config中找到一个值为my的Host,接着到其HostName上找到与其私钥对应的公钥的仓库地址。在本例中,就是根据其私钥id_rsa_my,在github.com托管平台上,匹配对应的公钥,然后匹配到convict/my-repo.git这个仓库。

六、单账号ssh免密登录

单账号跟多账号的操作步骤基本一致,但如果仅仅是一个账号配置免密登录,可以省略更多步骤,请看我的另一篇文章:

https://www.cnblogs.com/convict/p/14888283.html

Git配置多个github账号免密登录的更多相关文章

  1. Git配置用户信息和SSH免密

    一.配置用户信息 1.查看配置信息 # 查看所有配置 $ git config -l/--list # 查看系统配置 $ git config --system -l/--list # 查看用户配置 ...

  2. GIT生成SSH-KEY公钥放到服务器免密登录

    在使用git时老是碰到在push的时候提示没有权限的问题,那么现在咱们就来创建ssh-key来免密登录.我们来看看如何配置服务器端的 SSH 访问. 本例中,我们将使用 authorized_keys ...

  3. 【Git的基本操作九】ssh免密登录

    SSH免密登录 1. 进入用户家目录 cd ~ 2. 删除原有的 .ssh 目录 rm -r .ssh 3. 运行命令生成 .ssh 目录 ssh-keygen -t rsa -C github或gi ...

  4. Git配置ssh免密登录

    一.在用户目录下的.ssh目录下生成秘钥与公钥 如果用户目录下没有.ssh目录,则需要新建一个 cd ~/.ssh ssh-keygen -t rsa 一路回车即可 注:国内很多博客都会带上-C &q ...

  5. linux免密登录配置

    第一步:安装openssh-clients yum install -y openssh-clients.x86_64第二步:生成密钥 ssh-keygen第三步:拷贝公钥到其他机器 ssh-copy ...

  6. jsch配置sftp服务器ssh免密登录

    前期对接了一个通过ssh免密登录的需求,是基于原先密码登录sftp服务器的代码上进行改造,实际上代码改动量非常少,趁此机会对自己整理的资料做一下总结. 1. 什么是SFTP SFTP是一个安全文件传送 ...

  7. 【FATE】设置虚拟机固定IP以及免密登录

    一.前期准备 1.VMWare上新建三个Centos7的虚拟机 2.VMWare虚拟机的三种联网方式 1.桥接模式 -- 桥接: 默认使用VMnet0 这一种联网方式最简单,在局域网内,你的主机是怎么 ...

  8. CentOS下SSH远程免密登录服务器

    .5服务器上配置,通过ssh远程免密登录192. 1.安装SSH,此处省略 2.生成公钥和私钥,生成的秘钥默认在/root/.ssh/文件夹里面 [root@localhost ~ ::&&a ...

  9. 版本管理·玩转git(远程仓库配置和配置公钥免密登录)

    git系列的最后一部分内容,我们先来看看如何查看远程仓库. 输入 git remote -v 我们还可以删除远程库,输入 git remote remove origin 删除后再次查询,信息为空. ...

随机推荐

  1. RazorEngine.NetCore 相见恨晚,它让我彻底放弃了T4模板

    在dbfrist 时代,用T4模板生成代码,貌似还没有感觉到别扭.但是到了codefrist 后,我想要实体生成生成备注,我就得想方设法的去把备注弄到数据库,然后 还要处理模型中类型像枚举这种属性,渐 ...

  2. C语言 Make命令教程

    make只是一个根据指定的Shell命令进行构建的工具 在linux和unix中,有一个强大的使用程序,叫make,可以用它来管理多模块程序的编译和链接,直至生成可执行文件 make使用程序读取一个说 ...

  3. OpenIddict 登录及详细流程解析

    GitHub上实例都是集成了Identity来实现,我这里去掉了相关东西,实现自定义的登录满足自己的结构要求 服务端配置添加数据库服务以及定时任务服务 builder.Services.AddDbCo ...

  4. 解决ubuntu 18.04(桌面版)搜狗输入法不能正常使用的问题

    ubuntu下搜狗输入法的配置文件在~/.config目录下,一般有三个目录SogouPY.SogouPY.users.sogou-qimpanel 执行命令 $ cd ~/.config $ rm ...

  5. BootStrap 是什么东西?

    Bootstrap Bootstrap 能很快速搭建一整套页面.是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.所有设备都可以适配.所有项目都适用.1 ...

  6. 网络协议学习笔记(五)套接字Socket

    概述 前面学习网络知识的时候写过一篇关于套接字的随笔见<JAVA SOCKET 详解>,现在本人正在系统的学习网络知识,现在除了温故知新之外,在详细的学习记录一下套接字的知识. Socke ...

  7. 带你自定义实现Spring事件驱动模型

    Spring 事件驱动模型概念 Spring 事件驱动模型就是观察者模式很经典的一个应用,我们可以通过Spring 事件驱动模型来完成代码的解耦. 三角色 Spring 事件驱动模型或者说观察者模式需 ...

  8. Web开发之HTTP协议

    HTTP响应消息 一个HTTP响应代表服务器向客户端回送的数据. 一个完整的HTTP响应包括如下内容: 一个状态行.若干消息头.以及响应正文,其中的一些消息头和正文都是可选的,消息头和正文内容之间要用 ...

  9. vue2如何根据不同的环境配置不同的baseUrl

    在正常的开发中,通常我们需要在线上的测试环境中运行代码来检查是否有些线上才会出现的bug或者是问题.每次去特意的修改我们的baseUrl显然是不现实的,而且说不定哪天忘记了估计会被大佬喷死 首先,这是 ...

  10. 【笔记】HOG (Histogram of Oriented Gradients, 方向梯度直方图)的开源实现

    wiki上的介绍 OpenCV的实现 cv::HOGDescriptor Struct Reference opencv cv::HOGDescriptor 的调用例子 HOGDescriptor h ...