引发思考的导火索
最近用github pages和hexo搭建了自己的博客,每次本地写好后,需要同步到github上,这需要执行下面一系列的命令1
2
3 hexo clean
hexo g && gulp
hexo d
为了图个方便,于是我写了一个blog.sh的脚本文件,将上面的命令添加在脚本中,每次想要更新博客的时候直接执行脚本文件就可以了。但是令我很烦恼的是每次执行到hexo d的时候就需要输入密码,对于我这个懒癌深入骨髓的人来说是无法容忍的。
问题出在哪里
我也这么问过自己。但是对于被git工具惯坏的我来说,对于git的一些命令行着实不太会玩。我在google上搜索了相关的问题,得到的答案都是不要使用https的方式,使用ssh的方式,然后再将生成的ssh公钥配置在github上就不用每次输入密码了,但实际上我就是这么做的。于是我去询问了八哥,他说你是不是给ssh设置了密码,仔细一想,好像还真是,生成ssh的时候,我还确实设置过密码。于是我重新生成了ssh,然后将公钥更新到github上,再次执行blog.sh脚本文件的时候就没有出现过需要输入密码的情况了。
好奇心驱使
这个简单的问题确实是很快得到了解决,但是好奇心驱使的我还有几个问题需要弄明白。
- ssh的密码是否是必要的?
- https方式和ssh方式的区别?
ssh的密码是否是有必要的
当我们通过ssh的方式试图建立连接的时候,如果客户端的私钥和服务端的公钥能够匹配上,那么这个客户端才会被授予访问权限。ssh公钥可以确保在没有密码的情况下安全的使用,但是如果你的电脑被黑了,别人就可以不受限制的通过你的电脑和服务端进行通信,所以如果你不觉得麻烦的话,最好还是给ssh设置一个密码吧。
如何生成ssh
在此记录下如何生成ssh密钥,免得每次都得google。1
ssh-keygen -t rsa -C "你的邮箱"
执行上面的脚本,如果你嫌麻烦就一路回车就好,生成的ssh密钥是没有密码的。这样就保证每次提交git的时候不用输入密码。1
pbcopy < ~/.ssh/id_rsa.pub
然后通过上面的命令,将ssh的公钥copy出来,最后将其粘贴到github上就可以了。
https方式和ssh方式的区别
这个问题产生是我发现github上clone代码的地方有两种方式,一种是https,一种是ssh。于是我尝试用https的方式clone了代码,然后修改了代码再push到github上,但是发现每次提交代码的时候我都需要输入用户名和密码,而通过ssh的方式我什么都不用管了。
因为使用https的时候,服务器是不知道这个请求由谁发起的,所以得每次输入用户名和密码进行验证,这样服务器才能知道执行push操作的是谁,有没有权限进行push。
而使用ssh方式服务器可以根据私钥和公钥是否匹配来知道你是谁,是否有权限进行push操作。
打破砂锅问到底
那我有没有一种方式是在使用https的时候也不用输入账户名和密码呢?其实也是有方式的,将用户名和密码保存在本地。1
git config credential.helper store
当我们再提交代码的时候,会将repo的url和用户名密码以 明文 的方式保存在根目录下面的 .git-credentials 文件中,你可以通过下面这种方式打开这个文件。1
open ~/.git-credentials
那么问题又来了,有没有加密方式去保存这个东西,嗯,于是我又去google了下,找到如下的命令1
git config --global credential.helper osxkeychain
这会告诉git用 osxkeychain 这种方式进行保存。可以参考这个链接
总结
这确实是一个简单的问题,但是让我明白了很多新东西。怀揣着疑问的态度去看待事情,你会发现很多有趣的东西。同时告诫自己以后要多用命令行,不能被工具惯坏了!!!!!!