通过hexo-deployer-ftpsync部署Hexo博客到Centos主机

上面博客讲解了通过hexo-deployer-rsync部署Hexo博客到VPS主机,本文将通过hexo-deployer-ftpsync插件部署Hexo博客到阿里云ECS主机。

安装配置FTP服务

安装vsftpd

  • 1、安装vsftpd服务
1
yum install -y vsftpd
  • 2、设置开机启动
1
systemctl enable vsftpd.service
  • 3、重启ftp服务
1
service vsftpd restart
  • 4、查看ftp服务状态
1
systemctl status vsftpd.service

以上命令执行完毕后,出现类似以下信息,代表vsftpd服务启动成功。

1
2
3
4
5
6
7
8
9
10
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2017-09-04 15:39:28 CST; 2min 16s ago
Process: 24322 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 24323 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─24323 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Sep 04 15:39:28 mvkit.com systemd[1]: Starting Vsftpd ftp daemon...
Sep 04 15:39:28 mvkit.com systemd[1]: Started Vsftpd ftp daemon.

配置vsftpd.conf文件

备份原有配置文件

1
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

修改配置文件

  • 1、修改原有配置文件内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#anon_upload_enable=YES/anon_upload_enable=NO/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#anon_mkdir_write_enable=YES/anon_mkdir_write_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#chown_uploads=YES/chown_uploads=NO/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#async_abor_enable=YES/async_abor_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#ascii_upload_enable=YES/ascii_upload_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#ascii_download_enable=YES/ascii_download_enable=YES/g" '/etc/vsftpd/vsftpd.conf'

sed -i "s/#ftpd_banner=Welcome to blah FTP service./ftpd_banner=Welcome to FTP service./g" '/etc/vsftpd/vsftpd.conf'
  • 2、添加如下内容到配置文件末尾
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 修改默认端口
listen_port=4646
# 对系统用户开启监狱模式的开关,用户访问只限制在主目录 不能访问其他目录
chroot_local_user=YES
# 解决500 OOPS: vsftpd: refusing to run with writable root inside chroot ()错误的解决方法
allow_writeable_chroot=YES
# 禁止反向域名解析,若是没有添加这个参数可能会出现用户登陆较慢,或则客户链接不上ftp的现象
reverse_lookup_enable=NO
# 设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒
# 即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进行修改
idle_session_timeout=600
# 启用guest
guest_enable=YES
# 使用虚拟账号形式
guest_username=vsftpd
# 虚拟账号配置目录
user_config_dir=/etc/vsftpd/vconf
# 设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改
data_connection_timeout=180
# 虚拟用户和本地用户有相同的权限,默认是NO
virtual_use_local_privs=YES
# 上面两个是与 passive mode 使用的 port number 有关,如果您想要使用 65400 到 65410 这 11 个 port
# 来进行被动式联机模式的连接,可以这样设定 pasv_max_port=65410 以及 pasv_min_port=65400。 如果是 0
# 的话,表示随机取用而不限制。
pasv_min_port=10060
pasv_max_port=10090
# 配置客户端空闲时的自动中断和激活连接的时间:
# 如下配置将使客户端空闲1分钟后自动中断连接,并在30秒后自动激活连接
accept_timeout=60
connect_timeout=30

创建用户文件

1
2
3
4
5
6
7
# 第一行用户名,第二行密码
vi /etc/vsftpd/virtusers

ftpuser1
ftppwd1
ftpuser2
ftppwd2

生成用户数据文件

1
2
3
4
# 生成数据文件
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
# 修改数据文件权限
chmod 600 /etc/vsftpd/virtusers.db

修改/etc/pam.d/vsftpd文件

备份原有文件

1
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

注释原有auth、accout配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 修改前
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth

# 修改后
session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
session required pam_loginuid.so
session include password-auth

新增如下auth、account配置

1
2
3
# 如果系统为32位,上面改为lib
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

新建vsftpd系统用户

1
2
3
#用户登录终端设为/bin/false(即:使之不能登录系统)
useradd vsftpd -d /home/vsftpd -s /bin/false
chown -R vsftpd:vsftpd /home/vsftpd

新建虚拟用户配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 创建虚拟用户配置文件目录
mkdir -p /etc/vsftpd/vconf
cd /etc/vsftpd/vconf

# 新建两个虚拟用户配置文件
touch ftpuser1 ftpuser2

# 创建用户根目录
mkdir -p /home/vsftpd/ftpuser1/
mkdir -p /home/vsftpd/ftpuser2/
chown -R vsftpd:vsftpd /home/vsftpd

# 编辑ftpuser1、ftpuser2用户配置文件,内容如下,其他用户类似
vi ftpuser1

local_root=/home/vsftpd/ftpuser1/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

vi ftpuser2

local_root=/home/vsftpd/ftpuser2/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

阿里云添加过滤规则

09302ff1407bd93a/c0a41f1b32654577ad499cfd58445846.png

注意:一定要将10060/10090端口范围添加到安全策略中,否则会出现以下错误:

1
2
3
4
5
6
7
8
9
10
11
状态:	已从服务器断开
状态: 正在连接 xx.xx.xx.xx:4646...
状态: 连接建立,等待欢迎消息...
状态: 不安全的服务器,不支持 FTP over TLS。
状态: 已登录
状态: 读取目录列表...
状态: 服务器发回了不可路由的地址。使用服务器地址代替。
命令: LIST
错误: 20 秒后无活动,连接超时
错误: 读取目录列表失败
状态: 已从服务器断开

重启ftp服务

1
service vsftpd restart

查看端口状态

1
2
3
4
5
6
7
8
9
[root@mvkit vconf]# netstat -nat                      
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 401 0 172.31.25.136:40802 106.11.68.13:80 CLOSE_WAIT
tcp 0 0 172.31.25.136:45332 100.100.25.3:80 ESTABLISHED
tcp 0 96 172.31.25.136:22 113.106.63.129:59276 ESTABLISHED
tcp6 0 0 :::4646 :::* LISTEN

配置FTPSync

安装hexo-deployer-ftpsync

1
npm install hexo-deployer-ftpsync --save

修改配置

1
2
3
4
5
6
7
8
9
10
deploy:
type: ftpsync
host: <host>
user: <user>
pass: <password>
remote: [remote]
port: [port]
ignore: [ignore]
connections: [connections]
verbose: [true|false]

测试部署

1
2
3
hexo clean
hexo g
hexo d

参考文档