公司项目从svn中迁移到了gitlab,而自己的一些项目放在github上。这样就导致要配置不同的ssh-key对应不同的环境。废话不多说,直接上步骤:
1、生成gitlab上账号对应的ssh-key
ssh-keygen -t rsa -C "yourmail@xxx.com" -b 4096 -f ~/.ssh/gitlab_id_rsa
在~/.ssh/目录下会生成gitlab_id_rsa和gitlab_id_rsa.pub私钥和公钥。我们将gitlab_id_rsa.pub中的内容粘帖到公司gitlab服务器的SSH-key的配置中。
2、生成github上账号对应的ssh-key
ssh-keygen -t rsa -C "yourmail@xxx.com" -b 4096 -f ~/.ssh/github_id_rsa
在~/.ssh/目录会生成github_id_rsa和github_id_rsa.pub私钥和公钥。我们将github_id_rsa.pub中的内容粘帖到公司github服务器的SSH-key的配置中。
3、添加私钥到Mac钥匙串中
ssh-add -K ~/.ssh/gitlab_id_rsa
ssh-add -K ~/.ssh/github_id_rsa
出现
Identity added: /Users/uhope/.ssh/github_id_rsa (/Users/uhope/.ssh/github_id_rsa)
就表示成功了
# 可以通过 ssh-add -l 来确认私钥列表,看是否2个私钥添加成功
ssh-add -l
# 可以通过 ssh-add -D 来清空私钥列表
ssh-add -D
4、修改配置文件
在~/.ssh/目录下新建一个config文件
touch config
在config中添加如下内容:
# gitlab
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa
# 配置文件参数
# Host : 自定义,方便记录是那个网站的ssh-key
# HostName : 对应网站的域名,如github.com,我们公司自己配置的gitlab内部地址:10.0.0.10
# IdentityFile : 指明上面User对应的identityFile路径
5、目录结构
config github_id_rsa.pub gitlab_id_rsa.pub
github_id_rsa gitlab_id_rsa
6、测试是否配置成功
ssh -T git@github.com
输出:The authenticity of host 'github.com (192.30.255.112)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no)?
直接输入 yes, 然后输出:Hi sunny110! You've successfully authenticated, but GitHub does not provide shell access.
就表示成功的连上github了。
同理,测试gitlab, ssh -T git@10.0.0.10,输入“yes”,最终输出“Welcome to GitLab, xxx!”表示配置成功
7、最终的目录结构
config github_id_rsa.pub gitlab_id_rsa.pub
github_id_rsa gitlab_id_rsa known_hosts
至此,就可以尽情享受使用git的快感了!
8、 解决Mac重启之后ssh-add失效的问题
虽然使用了ssh-add -K "KeyPath"
命令写入Mac钥匙串,但是在“钥匙串”中找不到保存的SSH密钥,重启后测试,ssh密钥还是被清空了。
查看官方文档,问题出在系统上,从macOS Sierra 10.12.2以后,SSH的配置选项中多了“UseKeychain”选项,在man ssh_config
页面中有这样的介绍:
UseKeychain
On macOS, specifies whether the system should search for
passphrases in the user's keychain when attempting to use a particular key. When the passphrase is provided by the user, this
option also specifies whether the passphrase should be stored
into the keychain once it has been verified to be correct. The
argument must be yes'' orno''. The default is ``no''.
要解决这个问题,就要借助于UseKeychain选项。在~/.ssh/config文件中添加下面这段话,问题就可以解决了:
AddKeysToAgent yes
UseKeychain yes
如果还是没有解决该问题,可以自己编写shell脚本,添加到开机启动项当中
vim .ssh/add_key.sh
#! /bin/bash
# 添加github公钥
ssh-add -K ~/.ssh/github_id_rsa
# 添加gitlab公钥
ssh-add ~/.ssh/gitlab_id_rsa
// 保存退出后,赋予sh文件可运行权限
chmod +x .ssh/add_key.sh
选择sh文件打开方式为命令行工具(iTerm/终端)
添加sh文件到开机启动项:系统偏好设置>用户与群组>登录项>+ 如果需要可勾选隐藏项
这样就真正大功告成了