本机 Win10
家庭服务器 Win10
远程服务器 CentOS

最近在家里搞了一台闲置主机作为HomeServer,原装正版Win10就懒得折腾了,毕竟只是用来存放文件以及SVN及DB备份用而已,顺道跑跑一些计划任务。

首先因为家里路由设置是每天重启一次,所以IP会变动,影响阿里云白名单,这个可以用过阿里云API来处理(后面也会用到),具体见阿里云各APISDK

然后就想着通过本地的SVN可以向第三天机器提交代码,这么做目的有2个

1.可是实现代码版本本地化,降低服务器放svn服务的风险,以及客户风险。

2.可以作为中继,利用hook再次作为子机,向其他svn主机提交更新,控制本地组频繁提交导致版本过多问题。

设置方案:

  1. 设置一个域名解析到家庭IP(会变)
  2. 利用IP查询接口查询当前外网IP,如变更则提交阿里云云解析API,更新解析地址。
  3. 利用Win自带的计划任务定时执行IP检测任务
  4. HomeServ安装VisualSVN,提供本地SVN服务
  5. 提交版本库等等(不累述
  6. 在远程服务端SVN CO本地版本库,记得这里要使用域名(当然,如果这里做一个计划任务获取最新IP也是可以的,方法很多)
  7. 设置HOOK
    • 下载 putty 完整包
    • 生成公钥密钥(不累述
    • 利用 puttygen 工具讲 openssh 的私钥转成 putty 的密钥
      • 选择 Import key 引入文件
      • 按 Save private key 保存ppk格式密钥
    • 公钥文件上传到远程服务器 ~/.ssh 下,权限文件夹700 / 文件600
    • 利用命令plink -v -batch host获取密指码 aa:bb:cc:xxxx
    • hook 编辑:plink.exe -hostkey "aa:bb:cc:dd.....ee:ff" -i "..\serv.ppk" root@IP地址 "export LANG=zh_CN.UTF-8; svn update /html/repo; exit;"
  8. 测试完成

第7步遇到的坑比较多,记录一下,因为不想给远程环境追加可执行SHELL的能力,所以采用了SSH链接,刚开始使用了自带的OPENSSL,单独执行完全没有问题,但是用HOOK执行,总是没有结果,会卡住。

所以怀疑是用户问题(事实也确实是),但因为Adminstrator无法登录(家庭版没有组策略,但是如果再去折腾组策略,似乎就是不断地挖坑了)所以看不到问题点,输出也没有内容。于是换了Plink,Plink给了正确的反馈,发现原来是提示是否保存服务端证书的提示卡住了,用命令行输入Y。。。?!#¥#@¥

输入Y是不可能的了。。。也没有-y的参数,就很尴尬了。

翻了一下plink参数,发现了 -hostkey 参数,所以,我只要有了那段密指码就能解决问题了,谷歌一下就找到了这个命令 plink -v -batch host,利用它就能获取到完整密指码了,就是上面的 aa:bb:cc:dd…

到此就可以顺利的让hook利用ssh连接到远程,做任何事情了。可扩展的功能就很多了 23333