博客改版,请直接访问新版文章:https://www.cnblogs.com/xiaoxi666/p/9975981.html

背景

我们在工作中会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目。出于各种原因,自己的 github 项目无法使用公司的 git 账号,于是我们可以为自己的 github 创建一个新的 git 账号,这就需要生成新的 ssh 密钥。
下面总结了创建多个互相独立的 ssh 密钥的步骤(以公司的和自己 github 的为例)。

步骤(以 mac 为例)

  1. 在文件夹 ~/.ssh/ 下创建两个文件夹,分别为 company/github/,前者存放公司的 ssh密钥,后者存自己 github 的 ssh 密钥。下面的步骤以创建 github 密钥为例:

  2. 在终端执行命令:ssh-keygen -t rsa -C "your_github_email@example.com"

  3. 然后会提示 Enter file in which to save the key,输入文件路径 ~/.ssh/github/id_rsa_github,最后就会在该路径下生成 id_rsa_githubid_rsa_github.pub 两个文件(若直接回车的话,会保存在~/.ssh/文件夹中)。

  4. 然后出现 Enter passphrase (empty for no passphrase),直接回车即可。

  5. 最后会出现创建成功的提示:

    Your identification has been saved in .ssh_github/id_rsa_github.
    Your public key has been saved in .ssh_github/id_rsa_github.pub.
  6. 文件id_rsa_github.pub中保存的就是 ssh 公钥。可以利用命令 pbcopy 将其复制到剪贴板,比如我的命令就是 pbcopy < ~/.ssh/github/id_rsa_github.pub。当然你也可以找到该文件手动复制。

  7. 在 github 网站中添加该 ssh 公钥。

  8. 创建公司 ssh 密钥 的过程类似,不再赘述。

  9. 两个 ssh 密钥创建完毕后,在~/.ssh/文件夹中创建文件config,添加如下内容:

    # The git info for company
    Host git.XXX.com                 # git别名,写公司的git名字即可
    HostName git.XXX.com             # git名字,同样写公司的git名字
    User git                         # 写 git 即可
    IdentityFile ~/.ssh/company/id_rsa           #私钥路径,若写错会连接失败# The git info for github
    Host github.com                  # git别名,写github的git名字即可
    HostName github.com                  # git名字,同样写github的git名字
    User git                         # 写 git 即可
    IdentityFile ~/.ssh/github/id_rsa_github #私钥路径,若写错会连接失败

    注:配置文件中各参数含义请参见扩展部分

  10. 网上很多文章说要执行命令 ssh-add 将 IdentityFile 添加到 ssh-agent中,具体到本文中就是执行 ssh-add ~/.ssh/company/id_rsassh-add ~/.ssh/github/id_rsa_github其实这个操作只是把专用密钥添加到 ssh-agent 的高速缓存中,因此略过该步骤也不会有影响。

  11. 这一步用于验证是否配置成功,以 github 为例,输入 ssh -T git@github.com,若出现

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

    这样的字段,即说明配置成功。公司的同理。

总结

本文描述了单机配置两个 git 平台ssh密钥的方法,多个账号同理。推荐在 ~/.ssh/ 文件夹下为不同的平台建立不同的文件夹,方便管理。根据上述配置,我的 ~/.ssh/ 文件夹下是这样子的:

├── company
│   ├── id_rsa
│   └── id_rsa.pub
├── config
├── github
│   ├── id_rsa_github
│   └── id_rsa_github.pub

扩展

关于配置文件 config

  1. 配置文件的位置:上面我们在 ~/.ssh/ 文件夹下创建配置文件,其实也可以指定位置,具体可查阅 ssh帮助手册(man 1 ssh)。

    -F configfileSpecifies an alternative per-user configuration file.  If a configuration file is given on the command line, the system-wide configuration file (/etc/ssh/ssh_config) will be ignored.  The default for the per-user configuration file is ~/.ssh/config.
  2. Host 别名:可以随意指定,比如你把 github 的 Host 别名设置为 banana,那你在测试的时候也可以输入ssh -T banana,以后 clone 项目时也可以用 banana 代替 github.com 。

  3. User: 注意它和 git 中的 user.name 不是一个概念。

    • 配置文件中的 User 是登录提供 git 服务的平台(如这里的 github)的服务器主机时指定的用户名,比如 github 中 clone 项目时选择 ssh,链接均以 git@github.com开头,@ 前面的 git 就是 github 对应服务器主机中的一个用户名,即上面设置的 User,@ 后面的 github.com 就是 HostName);

    • git 中的 user.name 是用来追踪代码的,提交代码时显示的作者名字就是它,比如在 github 中,我的 user.name 就是 xiaoxi666。这里引出了另外一个问题:我在本机中配置了多个 git 账号,如何在不同的项目中自动切换不同的作者名字?比如我在公司的代码库里提交代码时,用的就是另外一个名字而非 xiaoxi666。这部分内容涉及到了 git 的配置(可以在终端输入 git config --help 查看官方说明),你一定有过下面这种配置的经历:

      git config --global user.name "user_name"
      git config --global user.email "user_name@example.com"

      实际上,git 有三种配置选项,分别对应于 --system 、--global、--local,上面就是 --global选项。三种配置选项分别对应于三个配置文件:

      --system  ->   /usr/local/git/etc/gitconfig
      --global  ->   ~/.gitconfig
      --local   ->   你的项目仓库路径/.git/config        

      这三种配置文件的优先级由低到高为:--system、--global、--local,优先级高的配置会覆盖优先级低的配置。一般情况下,我们不会去设置 --system 选项,主要用的是 --global 和 --local。正如网上满天飞的教程中,我们一般会设置 --global,这样就不用在每个项目中设置一遍了;但是如果配置了多个 git 账号,需要在一些项目中使用不同的作者名字,就需要单独为该项目设置 --local。需要注意的是, --local 选项只能 cd 到当前项目路径下中执行,否则会报错 fatal: --local can only be used inside a git repository。

      注一:如果 --system、--global、--local 都没有设置 user.email,将无法提交代码,因为无法识别代码作者。在设置了 user.email 的前提下,如果 --system、--global、--local 都没有设置 user.name,则会使用计算机登录用户名作为代码提交的作者名字。
      注二:设置 --local 时记得同时设置 user.name 和 user.email,如果只设置 user.name,提交名字虽然正确了,但 user.email 还是用的 --global 中的 user.email,这会导致 github 仓库中显示的提交者却不会链接到你的账号:头像是灰色的八爪鱼,名字也没有链接。

  4. 配置文件可指定的参数还有很多,如端口等,这里我们直接使用默认端口 22,因此没有再去指定。

其他

  1. pbcopypbpaste 是两个非常好用的命令,可查阅相关资料了解。
  2. 文章 http://man.linuxde.net/ssh-add 描述了 linux 的 ssh-add 命令,讲得不错。
  3. mac 分别有用户名、主机名(HostName),以及计算机名。其中计算机名可以在 "System Preference" -> "sharing" 中设置,是分享时展示的名字;我们打开终端时,会以用户名@主机名 当前路径 $主机名:当前路径 用户名$ 的格式显示,其中主机名可以用命令 scutil –-set HostName new_hostname 设置。
  4. 有时我们需要添加或改变远程仓库的地址,添加命令为:git remote add origin 项目地址 ,改变命令为 git remote set-url origin 项目地址。其中项目地址的格式为 ssh 或 https。可以参见文章加以了解。

转载于:https://www.cnblogs.com/xiaoxi666/p/9970719.html

配置多个git账号的ssh密钥相关推荐

  1. 配置多个git账号或多个SSH账号

    开发过程中可能会需要在同一台电脑上配置两个git账号,一个账号用来将公司产品推到公司的代码仓库,另一个账号需要将自己私人的"玩具"推到github等平台,这就可能会需要使用不同的端 ...

  2. git生成ssh密钥详细步骤 git如何生成ssh密钥

    git生成ssh密钥详细步骤 git如何生成ssh密钥 git生成ssh密钥详细步骤?Git是一个开源的分布式版本控制系统,可以高效敏捷的处理任何项目,用于帮助管理Linux内核开发.而生成一个ssh ...

  3. 初次使用git配置以及git如何使用ssh密钥(将ssh密钥添加到github)

    初次安装git需要配置用户名和邮箱,否则git会提示:please tell me who you are. 你需要运行命令来配置你的用户名和邮箱: $ git config --global use ...

  4. 配置多个git账号_在Windows下配置多个git账号

    本文记录了在Windows下配置两个github账号的过程. 1. 生成并部署SSH key 安装好Git客户端后,打开git bash,输入以下命令生成user1的SSH Key: ssh-keyg ...

  5. windows下在一台电脑上配置多个git账号

    假设环境 配置账号一 生成ssh密钥 github网站配置 在相应的.ssh目录下会生成名为id_rsa私钥文件和id_rsa.pub公钥文件, 打开id_rsa.pub公钥文件,复制里面的公钥添加到 ...

  6. 一台电脑上配置多个git账号(gitee),向不同git线上仓库提交(命令行/TortoiseGit同时) 代码

    目录 1.一台电脑上实现与多个git在线仓库提交代码的实际场景 2.安装git TortoiseGit 生成SSH key 和 git的.ssh目录 创建并配置config文件 2.1.首先必须先安装 ...

  7. idea 配置多个git账号_一台机器使用不同的Git账号

    一台机器使用不同的Git账号 场景 在日常使用 git 作为仓库使用的时候,有时可能会遇到这样的一些情况: 1. 有两个 `github` 账号,一台电脑怎么同时连接这两个账号进行维护呢? 2. 自己 ...

  8. 配置多个git账号_docker随手笔记第七节 jenkins通过git部署java微服务插件安装

    docker随手笔记第一节 docker概念及安装 docker随手笔记第二节 docker常用命令解析 docker随手笔记第三节 docker构建java镜像 docker随手笔记第四节 dock ...

  9. 解决sourceTree的git clone 报SSH密钥认证失败的问题

    好不容易通过了不用登录sourceTree的问题,开开森森打开sourceTree的时候,使用Clone的时候发现还是无法使用会报SSH错认证失败,崩溃! 下面提供两种比较方便的解决方法 前提是你的电 ...

最新文章

  1. 2020年第十五届全国大学生智能汽车竞赛山东赛区成绩统计
  2. 纠结的Python2.7编码与os.walk()函数的目录参数
  3. 配置深度学习环境的重要资料
  4. 前端学习(2455):layout处理
  5. 全站仪和手机连接软件_全站仪各方面应用的原理、操作及计算,看这篇就对了!...
  6. 343. 整数拆分(JavaScript)
  7. 软件测试模型-V模型
  8. async_memcache for tornado
  9. Datamill 一个开源的框架
  10. iATKOS v7硬盘安装教程(硬盘助手+变色龙安装版)
  11. 1100个商务企业宣传通用PPT模板免费下载网址
  12. 微信小程序自定义底部导航栏组件
  13. 电力监控系统在嘉兴万豪酒店的设计与应用
  14. HCIA的OSI基础模型理解
  15. 人一般长到几岁才会停止长高?
  16. git版本管理软件——搭建git服务器
  17. 威马汽车任命前高盛高管为首席战略官 新一轮融资将超30亿
  18. 华为和英国电信正式签署“21世纪网络”合同
  19. 和Vue来一场美丽的邂逅
  20. 契约锁与200多家软件厂商实现集成应用,实现更多业务电子签需求

热门文章

  1. python import system_[Python Basics]引用系统(The Import System)
  2. php+select为空,SELECT时候,如何处理某字段空值?
  3. php备份网站程序,使用PHP备份整个网站
  4. 计算机专业使用的工具,电子投标工具使用手册计算机软件及应用it计算机专业资料.doc...
  5. java 数组转化为arraylist_在Java中怎样把数组转换为ArrayList?
  6. 接口做的好怎么形容_大连SIEMENS西门子M174接口plc模块
  7. 正态分布的前世今生:正态分布的进一步发展
  8. wxpython多线程 假死_wxpython多线程防假死与线程间传递消息实例详解
  9. centos6.8yum安装mysql_centos6.8 yum安装mysql 5.6 (完整)
  10. mysql objectid_MongoDB 的objectid和UUID