GitHub 和 Gitlab 共存

这两天,想通过Github Pages来搭建一个自己的Blog。过程中需要用到SSH。因为公司项目使用的是Gitlab,所以之前其实两者通过一个config,已经可以进行共存了。但是最近💻升级到macOS Serria后,发现原先的配置失效了。ssh -T git@github.com,一直显示xxxx deniedxxxxx。按照Github的官网指南来讲,这是,没有配置好。于是又走了一遍流程。ssh -T git@github.com。再次成功了。

然并卵!!!!

重启💻的我表示很受伤。配置在此失效了。可能配了个假config。于是,继续流程,再重启,再失效。

先扯扯配置的过程吧。GithubGitlab使用SSH共存。如果二者是使用同一个邮箱,那OK,没有任何大问题,可以共享一个SSH。不过这种使用同一个邮箱的,机率还是比较少的。因此需要额外的一个配置文件。
~/.ssh目录下的config,若不存在,则新建一个touch config

之后,将下述内容给补充进去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Default github user
Host *@github.com // 任意
HostName github.com
User xxxx // 任意
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_github // 之前生成的 github_rsa
# second user(chenjiabin@linghit.com)
# 建一个gitlab
Host *@gitlab.xxx.com
HostName xxxx.com
User xxx
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_gitlab

之后——

1
2
$ eval "$(ssh-agent -s)"
$ ssh-add -K [key] // eg: shh-add -K ~/.ssh/id_github

此时要将githubgitlabkey都加进去。加完之后,ssh-add -l。会看到两个已加入的RSA

一般来说,如果是macOS Serria以下的版本,那么到这里基本就是成功了。如果你和我一样都是macOS Serria,重启之后,还是失效。那就还要多两步。

之前使用ssh-add -K,这是会把RSA的密码存储至keychain里面来着,但是,在macOS Serria,这个已经失效了。

p1

ssh多出了两个option——UseKeychain&AddKeysToAgent。详情看官网描述吧。上述的config则多了变化——

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Default github user
Host *@github.com // 任意
HostName github.com
User xxxx // 任意
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_github // 之前生成的 github_rsa
AddKeysToAgent yes
UseKeychain yes
# second user(chenjiabin@linghit.com)
# 建一个gitlab
Host *@gitlab.xxx.com
HostName xxxx.com
User xxx
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_gitlab
AddKeysToAgent yes
UseKeychain yes

再次进行ssh-add。重启。然后发现照样无效。

p2

上我大Google求助。终于找到一个解决方案。大神的解决方案

大神的解决方案:每次启动,都去执行一次ssh-add -A

~/Library/LaunchAgents/目录下,加入一个.plist。内容如下——

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ssh-add-a</string>
<key>ProgramArguments</key>
<array>
<string>ssh-add</string>
<string>-A</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

重启。成功。

p3