使用OpenSSH配置sftp服务端来更新hexo博客的保姆级教程

阅读此文前需要掌握Linux的基本操作和SSH的配置方法。

为什么选择SFTP

SFTP是一种基于SSH的文件传输协议。SFTPFTP的区别就好比安全套接层[1]和安全套的区别。

创建用户和相关目录

创建一个用户(下文以www-user为例),家目录随便设一个,反正用不到。默认Shell也随便设一个(比如/bin/true),反正也用不到。要给这个用户指定一个用户组(下文以www为例)。

创建一个目录用作这些SFTP用户的chroot目录(下文以/www为例)。
当然,chroot目录的所有者应为root用户。

在chroot目录下创建一个目录作为网站目录(下文以/www/website为例),将目录的所有者改为刚才创建的用户,并保证该用户拥有对此目录的全部权限。

配置SSHD

很显然,刚才创建的用户被希望使用SFTP传输文件,而不应使用SSH登录到Shell里。如果把Shell设置为/bin/true或者/bin/nologin之类的程序,就可以避免用户登录Shell,但是这样一来SFTP也没有Shell可用。所以我们需要做出特殊配置。

sshd_config中加入:

1
2
3
4
5
Match Group www
ChrootDirectory /www
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

请注意internal-sftp。这是实现用户无法登录Shell,但是可以使用SFTP的关键。

配置服务器

然后就可以将网站目录作为一个http服务器[2]的根目录了。当然要确保服务器的Worker进程的用户与刚才创建的用户位于同一用户组或者为root用户[3],以便能够读取网站目录下的文件。如果使用nginx,还需要注意要使Worker进程的用户拥有从根目录到网站目录之间的所有目录的执行权限。

客户端

使用npm安装hexo的sftp部署:

1
npm install hexo-deployer-sftp --save

_config.yml中配置部署方式:

1
2
3
4
5
type: 'sftp'
host: host.of.server
user: www-user
privateKey: /path/to/private/key
remotePath: /website

关于部署方式配置的更多内容,可以查看hexo官方文档。hexo支持多种部署方式,只需要将deploy属性作为一个数组,不同的部署方式作为数组的一项即可。

开始部署!

运行:

1
hexo d

  1. SFTP真的用到了SSL。 ↩︎

  2. 比如nginx,apache,hapi,express,或者自己实现一个(?)。 ↩︎

  3. 出于安全性考虑,不建议设为root用户,但是这样能省不少麻烦。 ↩︎

使用OpenSSH配置sftp服务端来更新hexo博客的保姆级教程

https://myxrcrs.cn/技术指南/使用OpenSSH配置sftp服务端来更新hexo博客的保姆级教程/

作者

李星烨

发布于

2021-08-27

更新于

2021-08-27

许可协议

CC BY-NC-SA 4.0

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×