前言
这篇博客早该写了,但因为期末周比较忙所以还是留到现在才写。
本博客是使用 hexo 构建,使用其插件部署到服务器的。一开始用 sftp 部署,但是其效率真的太低了,而且还容易因为网络问题卡住,所以我折腾了一下 rsync 部署。
rsync 是一个可以在 ssh 协议上运作的用于同步文件的实用工具,并且有增量更新的功能。
基本配置
主要的问题在于,虽然和服务器的连接成功建立了,但是 rsync 客户端和服务器之间的通信却失败了。
错误信息大抵如下:
1 | rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] |
经过我一番测试,发现其原因可能在于 Windows 和 Linux 下管道或者字节流的细微不同。总之,只需要使用 rsync 配套的 ssh,就没有问题了。我使用 chocolatey 安装的 rsync,因此也应使用附带的 ssh 搭配操作。在 Hexo 的 _config.yml
中设置 rsh
项为对应的 ssh 可执行文件(用 Windows 风格的反斜杠路径)即可。然后,因为 chocolatey 安装的 rsync 是由 cygwin 提供的,要使用 cygdrive 风格的路径指定 ssh 密钥,如:/cygdrive/盘符/目录/../文件
。 而且,密钥的(OpenSSH)版本不能太新,似乎只能用 RSA 4096 了,需注意。
配置好后,实际上我们的电脑还未信任远程机器,而附带的 ssh 默认的 known_hosts
需要管理员权限才能写入,因此要以管理员权限先运行特供 ssh 连接到远程主机一次,才能开始使用。
专门配置
本博客采用了特殊的安全方案,为部署博客提供了专门的账号来写入网站路径,并且设置了 chroot,防止其他文件受到影响。可以在 sshd_config
中 Match 特定用户,然后通过 ChrootDirectory
配置项设置 ssh 后的强制 chroot 路径。需要注意的是 chroot 路径只能为 root 所有,而且权限必须是仅 root 可写,子目录可以是其他权限方案。设置好 chroot 后,复制 sh
和 rsync
到 chroot 的目录下,利用 ldd
协助补全动态链接库,即可实现与本博客相同的配置方案:D。