配置多个git帐号的ssh密钥

背景

咱们在工做中会以 ssh 的方式配置公司的 git 帐号,可是平时也会使用 github 管理本身的项目。出于各类缘由,本身的 github 项目没法使用公司的 git 帐号,因而咱们能够为本身的 github 建立一个新的 git 帐号,这就须要生成新的 ssh 密钥。 下面总结了建立多个互相独立的 ssh 密钥的步骤(以公司的和本身 github 的为例)。linux

步骤(以mac为例)

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

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

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

  4. 而后出现 Enter passphrase (empty for no passphrase),直接回车便可。缓存

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

    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 公钥。ssh

  8. 建立公司 ssh 密钥 的过程相似,再也不赘述。ide

  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 configfile
         Specifies 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. 文章 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。能够参见文章加以了解。
相关文章
相关标签/搜索