Multiple SSH Keys settings

我不该只是等待,我应该去寻找。

大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。

首先先确认一下是否已经有一个公钥了。SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。关键是看有没有用 something 和 something.pub 来命名的一对文件,这个 something 通常就是 id_dsa 或 id_rsa。有 .pub 后缀的文件就是公钥,另一个文件则是密钥。假如没有这些文件,或者干脆连 .ssh 目录都没有,可以用 ssh-keygen 来创建。该程序在 Linux/Mac 系统上由 SSH 包提供,而在 Windows 上则包含在 MSysGit 包里:

1
2
3
4
5
6
7
8
9
10
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/schacon/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/schacon/.ssh/id_rsa.
Your public key has been saved in /Users/schacon/.ssh/id_rsa.pub.
The key fingerprint is:
43:c5:5b:5f:b1:f1:50:43:ad:20:a6:92:6a:1f:9a:3a schacon@agadorlaptop.local

它先要求你确认保存公钥的位置(.ssh/id_rsa),然后它会让你重复一个密码两次,如果不想在使用公钥的时候输入密码,可以留空。

现在,所有做过这一步的用户都得把它们的公钥给你或者 Git 服务器的管理员(假设 SSH 服务被设定为使用公钥机制)。他们只需要复制 .pub 文件的内容然后发邮件给管理员。

下面以github、gitlab为例,生成ssh公钥。

create different ssh key according the article Mac Set-Up Git

Please refer to github ssh issues for common problems.

配置用户名和邮箱

将项目从git仓库检出

git clone git@github.com:test, cd test and modify git config

1
2
3
4
5
git config user.name "用户名"
git config user.email "邮箱"
##全局设置用户名
git config --global user.name "用户名"

生成ssh key

1
2
ssh-keygen -t rsa -C "邮箱"

multi ssh key

开发过程中,可能会使用不同的git仓库,如github、gitlab或者其他云平台,如果每次都覆盖原来的id_rsa,那么之前的认证就会失效。
怎么破? 在~/.ssh目录下增加config文件,生成ssh key时同时指定文件名即可。

1
2
ssh-keygen -t rsa -f ~/.ssh/id_rsa.touker -C "email"

执行后,~/.ssh目录下会生成id_rsa.touker和id_rsa.touker.pub两个文件

配置config文件

1
2
3
$ cd ~/.ssh/
$ touch config
$ subl -a config

修改~/.ssh/config

Gitlab默认使用git用户

1
2
3
4
5
6
7
8
9
Host github.com
HostName github.com
User git
IdentityFile /root/.ssh/id_rsa_github
Host 10.0.30.24
HostName 10.0.30.24
User git
IdentityFile /root/.ssh/id_rsa_touker

上传公钥id_rsa.pub

1
2
## 拷贝到剪切板
clip < ~/.ssh/id_rsa.pub
  • github->settings->SSH keys
  • gitlab -> My SSH keys

验证是否配置成功

1
2
3
4
ssh -T git@github.com
Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.