背景
我们在工作中会配置 SSH 账号, 但是平时也会使用 GitHub 管理自己的项目, 于是我们可以为 GitHub 平台创建一个新的 SSH 密钥. 下面总结了创建多个 SSH 密钥的步骤(分别是公司的和自己 GitHub 的).
步骤(以 Mac 为例)
在文件夹 ~/.SSH/ 下创建两个文件夹, 分别为 company/ 和 GitHub/, 前者存放公司的 SSH 密钥, 后者存自己 GitHub 的 SSH 密钥. 下面的步骤以创建 GitHub 密钥为例:
在终端执行命令: SSH-keygen -t rsa -C "your_github_email@example.com"
然后会提示 Enter file in which to save the key, 输入文件路径 ~/.SSH/GitHub/id_rsa_github, 最后就会在该路径下生成 id_rsa_github 和 id_rsa_github.pub 两个文件(若直接回车的话, 会保存在~/.SSH / 文件夹中).
然后出现 Enter passphrase (empty for no passphrase), 直接回车即可.
最后会出现创建成功的提示:
- 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 密钥创建完毕后, 在~/.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
扩展
关于配置文件 config
上面我们在 ~/.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 .
Git 中的 user.name 和 配置文件中的 User 不是一个概念. 前者是用来追踪代码的, 提交代码时显示的名字就是它, 比如在 GitHub 中, 我的 user.name 就是 xiaoxi666; 而后者是登录提供 Git 服务的平台 (如这里的 GitHub) 的服务器主机时指定的用户名, 比如 GitHub 中 clone 项目时选择 SSH, 链接均以 Git@GitHub.com 开头,@ 前面的 Git 就是 GitHub 对应服务器主机中的一个用户名, 即上面设置的 User,@ 后面的 GitHub.com 就是 HostName).
配置文件可指定的参数还有很多, 如端口等, 这里我们直接使用默认端口 22, 因此没有再去指定.
其他
pbcopy 和 pbpaste 是两个非常好用的命令, 可查阅相关资料了解.
http://man.linuxde.net/ssh-add 这里描述了 Linux 的 SSH-add 命令, 可以了解.
来源: https://www.cnblogs.com/xiaoxi666/p/9970719.html