咱们在工做中会以 ssh 的方式配置公司的 git 帐号,可是平时也会使用 github 管理本身的项目。出于各类缘由,本身的 github 项目没法使用公司的 git 帐号,因而咱们能够为本身的 github 建立一个新的 git 帐号,这就须要生成新的 ssh 密钥。 下面总结了建立多个互相独立的 ssh 密钥的步骤(以公司的和本身 github 的为例)。linux
在文件夹 ~/.ssh/
下建立两个文件夹,分别为 company/
和 github/
,前者存放公司的 ssh密钥,后者存本身github 的 ssh 密钥。下面的步骤以建立 github 密钥为例:git
在终端执行命令:ssh-keygen -t rsa -C "your_github_email@example.com"
github
而后会提示 Enter file in which to save the key
,输入文件路径 ~/.ssh/github/id_rsa_github
,最后就会在该路径下生成 id_rsa_github
和 id_rsa_github.pub
两个文件(若直接回车的话,会保存在~/.ssh/
文件夹中)。shell
而后出现 Enter passphrase (empty for no passphrase)
,直接回车便可。缓存
最后会出现建立成功的提示: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.
复制代码
文件id_rsa_github.pub
中保存的就是 ssh 公钥。能够利用命令 pbcopy
将其复制到剪贴板,好比个人命令就是 pbcopy < ~/.ssh/github/id_rsa_github.pub
。固然你也能够找到该文件手动复制。服务器
在 github 网站中添加该 ssh 公钥。ssh
建立公司 ssh 密钥 的过程相似,再也不赘述。ide
两个 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 #私钥路径,若写错会链接失败
复制代码
注:配置文件中各参数含义请参见扩展部分
网上不少文章说要执行命令 ssh-add
将 IdentityFile 添加到 ssh-agent中,具体到本文中就是执行 ssh-add ~/.ssh/company/id_rsa
和 ssh-add ~/.ssh/github/id_rsa_github
。其实这个操做只是把专用密钥添加到 ssh-agent 的高速缓存中,所以略过该步骤也不会有影响。
这一步用于验证是否配置成功,以 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
复制代码
配置文件的位置:上面咱们在 ~/.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.
复制代码
Host 别名:能够随意指定,好比你把 github 的 Host 别名设置为 banana,那你在测试的时候也能够输入ssh -T banana
,之后 clone 项目时也能够用 banana 代替 github.com 。
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 仓库中显示的提交者却不会连接到你的帐号:头像是灰色的八爪鱼,名字也没有连接。
配置文件可指定的参数还有不少,如端口等,这里咱们直接使用默认端口 22,所以没有再去指定。
pbcopy
和 pbpaste
是两个很是好用的命令,可查阅相关资料了解。用户名@主机名 当前路径 $
或 主机名:当前路径 用户名$
的格式显示,其中主机名能够用命令 scutil –-set HostName new_hostname
设置。git remote add origin 项目地址
,改变命令为 git remote set-url origin 项目地址
。其中项目地址的格式为 ssh 或 https。能够参见文章加以了解。