起因
之前通过GithubPages和Hexo搭建了个人博客,在这里可看到搭建的方法。现在呢,希望用另一个帐号,管理一个不同内容的博客。有了之前的经验,整个搭建的过程还是比较顺利,主要碰到的问题就是代码发布。之前github帐号,是通过Windows的凭证管理来实现的,按理说Github配置了多个帐号也是可以管理的。如图:
但是两套博客在发布代码的时候都出现了问题。
初步方案
将用户名和密码配置在Hexo的_config.yml
的配置项中,形如
1 | https://enderjo:[email protected]/enderjo/enderjo.github.io |
虽然这样配置是解决了发布问题,但密码安全问题就暴露出来了,想想之前有了解到Github有ssh功能,但也没用过,初步试了下一样发现两个帐号配置的问题,github不支持同一个公钥用于不同的帐号,会提示公钥已经被使用了,请教了下前同事事了解到ssh有个config的配置。
最终方案
基于同事的提示刚开始创建的config如下:
1 | Host github:enderjo |
Window中在用户目录%USERPROFILE%
下。之后使用ssh测试也是通的。
如下:
1 | ssh -T github.com:enderjo |
但测试Git Clone的时候提示无法
1 | git clone [email protected]:enderjo/enderjo.github.io.git |
参考Error: Permission denied (publickey)通过ssh-add证书的方式,能正常git clone。此时已可初步判断,git clone没有正常取到config的配置。
接着同事发来这篇文章
https://gitlab.com/gitlab-org/gitlab-ce/issues/45593
其中提到,可通过如下命令查看git clone的实际执行过程:
1 | GIT_TRACE=1 GIT_SSH_COMMAND="ssh -vvv" git clone [email protected]:my-group/my-project.git |
测试后的部分代码如下:
1 | $ GIT_TRACE=1 GIT_SSH_COMMAND="ssh -vvv" git clone [email protected]:enderjo/enderjo.github.io.git |
此时我们可以看到,实际执行的地址和测试的地址是不一样的。
1 | $ ssh -T [email protected]:enderjo |
ssh命令是根据config文件中Host记录与ssh命令时所输入的主机名来进行匹配的,而git clone因为使用:
分隔用户名。
之后查到这篇文章。config文件中的Host就是一个别名。
调整config
1 | Host gh-enderjo |
修改git clone命令
1 | $ git clone gh-enderjo:enderjo/enderjo.github.io.git |
测试正常,修改Hexo的_config.yml也能正常发布代码了。
增加Mac的配置
因为之前配置过了Windows,这里我需要把Windows中的ssh配置先拷贝到Mac上(~/.ssh)。
测试,此时会提示。
1 | Permissions 0755 for '/Users/airhead/.ssh/github-enderjo/id_rsa' are too open. |
需要修改权限为400(600也可以),注意修改路径
1 | chmod 400 /Users/airhead/.ssh/github-enderjo/id_rsa |
小结
利用ssh的config功能可以很好的管理Git的多帐号问题,但需要注意修改Git仓库的获取地址。
虽然一直有使用Git,但对于Git和ssh还是有很多不了解的地方。
参考链接
Error: Permission denied (publickey)
https://gitlab.com/gitlab-org/gitlab-ce/issues/45593
ssh-config配置
SSH Config 那些你所知道和不知道的事