本文是本人ubuntu配置hexo,ssh各种入坑的过程

把这个静态博客发布到github上还是花了我不少时间的,[捂脸],总之,一个个问题总会不期而遇,网上教程虽然很多,但不会有一个教程会很全面的覆盖到任何你碰到的问题.就像我一样,查了一个又一个的博客,仍然一无所获…那我究竟是遇见了什么奇葩的问题呢~

问题

我所使用的操作系统~ubuntu16.04,然鹅这就有问题了,因为涉及到了用户操作权限的问题.我用git克隆下来的hexo的部分文件是只读文件,更过分的是有些文件只有root才有权限访问.这是系统的文件防护机制,当然有其作用.但当我无意识的切换用户时,权限也随之改变,现如今想着可笑,曾经却一无所知.本人当时的骚操作是这样的:

生成ssh key以配置和使用 github

1
$ssh-keygen -t rsa -C "XXXX@gmail.com"

…省略一大堆内容,反正是配置完成了,如下代码检查是否连接成功

1
$ssh -T git@github.com

但请注意!:我此时用户是默认的$ , 不是 #(root)

hexo 的布置

1
2
3
4
$ cd ~/hexo/
$ hexo/ hexo s
$ hexo/ hexo g
$ hexo/ hexo d

然后就报错了…

1
2
3
4
5
6
7
8
ERROR Plugin load failed: hexo-tag-bootstrap
Error: EACCES: permission denied, open '/home/w-xiao/文档/git_repo/hexo/node_modules/hexo-tag-bootstrap/index.js'
INFO Deploying: git
INFO Clearing .deploy_git folder...
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Error: EACCES: permission denied, unlink '/home/w-xiao/文档/git_repo/hexo/.deploy_git/archives/index.html'
FATAL EACCES: permission denied, open '/home/w-xiao/文档/git_repo/hexo/db.json'
Error: EACCES: permission denied, open '/home/w-xiao/文档/git_repo/hexo/db.json'

问题解决中…

意思就是我没权限访问hexo/部分关键文件,hexo deploy 失败…
那我想,这还不好办么,使出如下命令符

1
$sudo su

然后再来一遍

1
2
3
hexo/# hexo s
hexo/# hexo g
hexo/# hexo d

自信地,嘚瑟滴以为这还难得到我么…结果是出了个自从使用ubuntu以来从未见过的”段错误”,它就直接

1
段错误

EXM???别的什么都没了,就留下三个 字 吗,才疏学浅的我可不懂这专业术语,尔后我去谷歌了下,寝室QQ群询问了一下,然后…就睡着了[捂脸],炎炎夏日,小睡也是别有风味的,然后一个下午就这么没了…晚上重拾问题 好好撸了一发 咳咳,是好好地认真的查了查资料,一下是baidu百科的回答:

段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gd tr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存 相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向 的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起 始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。

瞄了一眼…大概是看不懂了…再想了想,又看了看,原来还有解释:

一旦一个程序发生了越界访问,cpu就会产生相应的保护,于是segmentation fault就出现
了通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,
要么是受到系统保护的,还有可能是缺少文件或者文件损坏。

清楚明白了.那究竟是什么原因导致root用户发生段错误而默认用户反而没这个问题的呢??答案一定是在上面个的解释中了,具体原因有待进一步调查…反正没有谷歌到,心塞诶.

关键骚操作

现在我就陷入了进退两难的地步了 $:没足够的权限;#:段错误.真是苦酒入喉心作痛.
关键操作来了:我又换了个root的方法,当时也只是不报希望地瞎搞一通罢了,没想到误打误撞

1
$sudo nautilus

熟悉ubuntu的童鞋一定对以上命令不陌生,它是通过nautilus文件管理器打开文件,权限是root,尔后,打开了hexo/文件夹,在此文件夹中打开终端,输入

1
# hexo

它竟然有用了,真是奇怪哦,我开心高兴又喜出望外的输入

1
2
# hexo g
# hexo d

欧耶!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
INFO  Deploying: git
INFO Clearing .deploy_git folder...
INFO Copying files from public folder...
INFO Copying files from extend dirs...
位于分支 master
无文件要提交,干净的工作区
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Error: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

at ChildProcess.<anonymous> (/home/w-xiao/文档/git_repo/hexo/node_modules/hexo-util/lib/spawn.js:37:17)
at emitTwo (events.js:125:13)
at ChildProcess.emit (events.js:213:7)
at maybeClose (internal/child_process.js:897:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:208:5)

WTF!!!还是依旧清脆的打脸声…瞧了瞧,咦~怎么会是permission denid?我明明就配置过ssh-key,这么短时间应该也没有过期啥的,然后我试了试连接github

1
# ssh -T git@github.com

果然连接失败了,相比眼光尖锐的童鞋已经发现了猫腻.震惊!ssh连接失败原因竟是这…

The end

配置ssh-key时本人用了默认用户而非root,oh no,wtf!
然后登录root重新配置ssh-key就行了.生活如此多节,还得一个坑一个坑的踩过之后,慢慢才有了绕坑的能力.

Comments

⬆︎TOP