前言
使用 Github Page 部署个人博客后便知道,当我们用「用户名.github.io」作为仓库名时,再将 public 文件推至该 Github 仓库,便可得到一个形为「用户名.github.io」的网址。显然,这种仓库名在一个 Github 账号中只能存在一个,故而一个账号只能得到一个这样的网址。😑
由于我之前花了大量精力鼓弄了一个 Hexo 框架,主题为 Next 的博客,因加入了许多花里胡哨但却并没必要的功能,网站打开速度慢,这也是我转而使用 Hugo 框架的原因 。我既不想放弃魔改已久的博客,又不想网址太丑(绑定个人域名可以避免这点),于是干脆新申请了个 Github 账号用以配合 Hugo 搭建个人博客。🙃
但这时便面临问题,一方面仍执着于鼓弄 Next 主题新功能,另一方面还得向 Hugo 所在的 Github 仓库上传更新文件,而且两个博客都是通过默认的 HTTPS 的方式上传文件,HTTPS 输入账号密码后会默认保存,这就导致电脑登陆 Github 时可能会错位,即可能使用了账号一的密码去登陆账号二。
针对这种情况有一种解决方法:在想切换登陆账号二时,删去已保存的 Github 账号一的用户名和密码,接着再输入账号二的用户名和密码。
删去方法如下:
在以下路径找到 Github 的 Windows 凭据,直接删除即可。
显然这样的操作极为麻烦,倘若能通过 SSH 分别匹配好一个账号,那就能免去每次输入账号密码的麻烦过程了[1]😎。
先来看看如何使用 SSH:
单账号
首先执行下行命令生成 SSH 密钥对:
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
将上面的邮箱地址改为你自己在 GitHub 上的邮箱地址。如果你是第一次生成的话,一路回车即可(口令 passphrase 非必须)。若遇到需回答「 yes or no ?」,键入 yes
并回车即可。
这样就会在C盘用户目录下生成.ssh
文件夹,其中包含了 id_rsa 和 id_rsa.pub 这两个文件,前者是私钥,后者是公钥,用记事本打开 id_rsa.pub,复制其中的全部内容,再去 GitHub 上 设置 一个 New SSH key,标题随意起,最后粘贴公钥即可。这样本地的 id_rsa 密钥就可以和 GitHub上的 id_rsa.pub 公钥进行配对,授权成功。
然后添加远程仓库关联:
$ git remote add origin git@github.com:Nimnahc2020/myblog.git
$ git remote set-url origin git@github.com:Nimnahc2020/myblog.git
将git@github.com:Nimnahc2020/myblog.git
换为你仓库的 SSH 地址即可。
此外,当你本地第一次连接 GitHub 的服务器时,可能会有警告信息,键入 yes
并回车即可。
多账号
同单账号一样,先得到两组密钥对,邮箱分别对应两个账号:
# 帐号一
ssh-keygen -t rsa -b 4096 -C "your_email@example_one.com"
# 帐号二
ssh-keygen -t rsa -b 4096 -C "your_email@example_two.com"
这里注意,当看到提示:
Enter file in which to save the key (/home/archie/.ssh/id_rsa):
修改一下默认的 id_rsa
,建议在后面加上你的 GitHub 用户名,比如修改为 id_rsa_nimnahc
。或者直接进入.ssh
文件夹修改相应文件名称,如id_rsa_nimnahc
和 id_rsa_nimnahc.pub
。
通过上述操作,我得到id_rsa_nimnahc
和id_rsa_willcai
两份密钥。
然后,执行下面三行命令,将生成的两个密钥添加到 ssh-agent:
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa_nimnahc
$ ssh-add ~/.ssh/id_rsa_willcai
接下来,在.ssh
文件夹内添加一个 config
文件来配置 SSH:
$ touch config
输入以下内容(自行修改 host
和 IdentityFile
)
Host WillCAI2020.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_willcai
Host Nimnahc2020.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_nimnahc
类似的,添加或修改相应仓库的远程仓库链接地址:
# 帐号一
$ git remote add origin git@WillCAI2020.github.com:WillCAI2020/blog-hexo.git
$ git remote set-url origin git@WillCAI2020.github.com:WillCAI2020/blog-hexo.git
# 帐号二
$ git remote add origin git@Nimnahc2020.github.com:Nimnahc2020/myblog.git
$ git remote set-url origin git@Nimnahc2020.github.com:Nimnahc2020/myblog.git
最后,将相应的公钥添加到你相应的 GitHub 帐号即可。
可通过如下命令验证是否成功:
$ ssh -T git@WillCAI2020.github.com
$ ssh -T git@Nimnahc2020.github.com
若出现如下提示:
Hi WillCAI2020! You've successfully authenticated, but GitHub does not provide shell access.
即表示与远程仓库公钥匹配成功。🎉🍾🥂
后语
本打算通过这个方式实现免密分别部署的,但发现 hexo 并未达到预想效果,在hexo d
后报错git@github.com: Permission denied (publickey)
,但倘若通过 Git 命令提交 public 文件,却可以实现提交。🤔
因而部署hexo
我仍然使用 HTTPS 地址,而提交 Hugo 原码时我便通过 SSH 地址实现免登陆提交,这算是一种折中的方案吧。🙃
参考文章
- GitHub Help | 关于SSH
- GitHub Issues | 同一台电脑配置多个 git 账号
- CSDN | 解决 remote: Permission to userA/repo.git denied to userB
- reuixiy | 使用 SSH 连接到 GitHub(多帐号)
Q.E.D.