码迷,mamicode.com
首页 > 其他好文 > 详细

配置多个 git 账号的 ssh密钥

时间:2018-11-17 23:50:21      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:推荐   article   css   company   lin   top   参数   span   inline   

背景

在工作中,我们通常会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目。因此,我们需要为自己的 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_github 和 id_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                    
    HostName github.com               
    User git                            
    IdentityFile ~/.ssh/github/id_rsa_github    

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

  10. 网上很多文章说要执行命令 ssh-add 将 IdentityFile 添加到 ssh-agent中,具体到本文中就是执行

    ssh-add ~/.ssh/company/id_rsa 
    ssh-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 不是一个概念。

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

    b. 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。

    注一:设置 --local 时记得同时设置 user.name 和 user.email,如果只设置 user.name,提交名字虽然正确了,但 user.email 还是用的 --global 中的 user.email,这会导致 github 仓库中显示的提交者却不会链接到你的账号:头像是灰色的八爪鱼,名字也没有链接。

    注二:如果 --system、--global、--local 都没有设置 user.email,将无法提交代码,因为无法识别代码作者。在设置了 user.email 的前提下,如果 --system、--global、--local 都没有设置 user.name,则会使用计算机登录用户名作为代码提交的作者名字。

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

其他

  1. pbcopy 和 pbpaste 是两个非常好用的命令,可查阅相关资料了解。

  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://help.github.com/articles/changing-a-remote-s-url/ 加以了解。

配置多个 git 账号的 ssh密钥

标签:推荐   article   css   company   lin   top   参数   span   inline   

原文地址:https://www.cnblogs.com/xiaoxi666/p/9975981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!