node.js因为javascript的缘故,存在各种大大小小的坑,尽管各种注意,仍然免不了中招.
''
或 0
或 false
,也会误认为不存在;
|
|
一个ssh key绑定了一个github账号之后,无法再次绑定到另一个github账号,但现在需要在同一台mac上访问两个github账号下的repo,比如说一个私人的,一个工作的,怎么办?
此坑本道祭了道 “寻龙符” 搞定! 也就是google了一下,嘿嘿,现总结如下:
生成一个新的ssh key,首先建议将~/.ssh目录备个份,cp -r ~/.ssh ~/ssh_bak
,然后再执行以下指令,注意在提示保存位置时使用不同的文件名:
|
|
好了之后,.ssh目录下应该多了一对公钥和私钥,为了好举例,我再生成一个,就变成了这样:
|
|
生成之后,记得把id_rsa_abc.pub添加到对应的github账号中去.
把这两个key连同原来的key进行添加:
|
|
查看添加结果:
|
|
配置ssh的config:
|
|
内容如下:
|
|
注意这里第一行的Host实际上是一个别名,这个别名大有用处,第二行的HostName是真正的域名,第三行不解释,第四行就是ssh key的位置,那么如果还有更多的key,也是可以如法泡制的.
修改git项目的remote配置,这里我就直接修改项目dir/.git/config
这个文件的remote部分了.
|
|
看见了没,这里用到了之前提到的 别名 ,替换了原来的github.com
,这就是解决问题的关键! 其实这样就结束了,这个项目现在就能使用id_rsa_abc来进行fetch和push操作了.
网上的帮助有不少,但都没直接讲清楚这个 别名 的意思,有的写成了abc.github.com,特别容易造成误会,子域名?难道我还要改下hosts?
其实就是别名而已.当然,如果你还有gitcafe或者oschina的账号,也是可以同上处理的.
入Hexo之门才一天,这就踩坑了! 正是应了”凡悟道,必踩坑”之理.
先说说头一天踩的小坑吧:
_config.yml中的配置,这个配置文件对于字段键值的空白是尤其讲究啊!键名的冒号后面必须跟一个空格才还跟键值,否则报错.
如: language:zh-Hans
错误, language: zh-Hans
正确. 另外键名之前的空格也必须对齐,否则也报错!如:
|
|
以上错误,
|
|
以上正确.
总之,这个yml文件特别地敏感脆弱,就不要欺负她了.
ftpsync,这个必须是叫大坑了!
插件看上去特别”简单”,但工作原理肯定与你想的不一样,它是真的就是”同步”!是把ftp的服务端目录和文件调整成本地一模一样,也就是原来服务器上的文件如果本地没有话是会被删除,删除,删除(重要的事说三遍)掉的!而不是一般deploy只负责上传的理解.我去查了hexo-deploy-ftpsync插件,它使用的是node-ftpsync,人家的说明里明确说了:
This is not ftp-deploy. This application will delete files and directories on the remote server to match the local machine. Use this application in production at your own risk.
好吧,我这下损失大了,服务器的文件还不知道去哪里找…
好吧,那我配置ignore总可以避免服务端文件被删除吧,但这个ignore简单的配置一个目录名居然不生效?那到底如何配置呢?经过多方试验,发现这里必须按如下配置:
|
|
注意中括号不可少.
hexo g -d
,好,成功生成并上传了! 慢着,趁兴致我再来个小改或者再写篇美文post一下吧,好,再次hexo g -d
,咦?怎么报错了?
|
|
难道是心神不聚所致? 此时捏个 “凝神自省决” :
再次出手!还是报错!
好吧,看错误应该是远端的目录已经存在了无法再创建,开启 “填坑大法第一式” :查log.
开启ftpsync的verbose模式看看,果然够verbose,输出了一大版,原来这货是先取出远端的目录文件,再与本地的目录文件对比,然后将差异计算出来,最后执行相关的同步操作的.
仔细看了好多次,终于看出门道了,remote部分列出的目录不对!本来远端有个2015的目录,但remote的log中却只有一个5的目录,因此在计算差异时有了再次创建2015的目录的任务,但远端已经有了,所以执行时创建会失败.问题根源应该是在获取remote目录列表上了.
这是个大麻烦,很可能是个bug了,二话不说,先祭个 “寻字符” 吧,google,baidu,github狂搜一通,居然无解?那再祭起 “请神符” ,各论坛发问不提,还在github上提了相关的issue.
本想着就此等结果了,但身为踩坑道人,为平坑劫,求人先求已,心想nodejs有个好处,这些modules实际上是在自己手上,不像jar包没法动手脚,它是可以就着log追过去尝试寻下报错的根源.嗯,可以试试开启 “填坑大法第二式” :debug:
这个hexo-deploy-ftpsync是依赖于node-ftpsync的,而它是依赖于jsftp的,在node_modules里面找到jsftp猛下一顿console.log,尝试看下问题,
…历经3小时…
终于摸清了jsftp的ftp请求发送与接受处理流程,看来问题在接收上,jsftp还依赖一个作者的parse-listing项目,这个项目里对ftp返回内容做了解析,而这个解析是一个正则,经过验证,当目录为 纯数字 时,它会以为这是一个文件的大小,把它视作文件处理!
好吧,本道可以填坑了,先结一个 “混元补天阵” :fix. 阵眼分别是fork,git clone,patch,mocha,待到阵法达成之时,再hexo g -d
,终于没问题了. 为了积功德,结个好的因果,遵天理,进行 pull request ,再对之前提的各个issue(是的,从hexo开始到jsftp所有依赖的项目里我都提了issue),做了补完.
至此,心愿已了,虽然费时甚多,但有了善果,可以愉快的睡了.
]]>机房的例行漏洞扫描显示openSSH6.6及以下版本存在以下漏洞:
“verify_host_key函数 SSHFP DNS RR 检查绕过漏洞(CVE-2014-2653),建议升级OpenSSH至6.6之后版本.”
实际上通过yum是无法直接升级到6.6以后版本的(CentOS7好像可以直接升级到更高版本),而rpm包能成功安装的最新版本也只是6.6p1版本,唯一的办法只能通过编译安装了,而这一过程比较痛苦,因为是ssh,所以远程安装时必须先启用telnet备用,待补好后再关闭,事实证明这一步骤非常非常必要!
经过三四天的折腾,成功完成了20几台服务器的升级,在此记录下:
登录后先跳转root权限,执行以下命令:
|
|
在这里将/etc/xinetd.d/telnet(这里telnet文件名也有可能为krb5-telnet) 中的disable=yes改为no,保存退出.
|
|
启动telnet服务并编辑iptables打开23端口,也就是telnet端口,打开后重启iptables
|
|
此时,应该可以另开一个terminal使用telnet
这里推荐先用yum update openssl将openssl升级,至少是1.0.1版本.
执行以下命令:
|
|
以上指令会先下载6.7的源码,然后备份ssh并卸载当前的openssh,随后将源码进行编译,这里如果执行出错,请检查第一步的相关依赖包没有通过yum安装完整,如果没有,建议更换yum源,比如用阿里的源.
最后一句会显示当前ssh的版本号,如果成功显示openSSH6.7p1,那基本上算是接近成功了.
|
|
这里将ssh服务做成开机启动并启动了sshd,打开sshd_config后,如果需要连接xshell4,则按下图进行以下修改:
保存退出后,重启sshd并查一下sshd服务是否是自启动状态:
|
|
停止telnet服务,并修改配置:
|
|
将之前改过的disable=yes又改回去成no.
随后再将修改iptables将23端口关闭,并重启iptables服务.
至此,可以再开ssh登录,用ssh -V查看版本号.
还是纯静态站的构建,时隔这么久,没想到nodejs倒是出了一个不错的静态blog项目 – hexo ,想当初用freemarker+fmpp实现的纯静态blog终于有了升级之日了.哦,记得那一版还是2008年1月.
就是喜欢nodejs简单,直接,纯粹.
说实话,之前对node一直报以非常怀疑的态度,如果不是因为项目的性能问题实在搞不定了,可能会错过很长时间,谁知道一旦尝试,爱不释手了…
|
|
嗯,就这样.
]]>