一、基础自动化部署脚本(Shell)
基础自动化部署可通过Shell脚本实现,覆盖系统更新、软件安装、配置生成、用户创建及服务管理等步骤。以下是一个典型脚本示例:
#!/bin/bash
# 更新系统包列表
sudo apt update
# 安装vsftpd(自动确认依赖)
sudo apt install -y vsftpd
# 备份原始配置文件(避免误操作丢失)
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
# 生成自定义配置文件(通过EOF重定向到目标文件)
cat <<EOF | sudo tee /etc/vsftpd.conf
local_enable=YES # 允许本地用户登录
write_enable=YES # 允许上传文件
local_umask=022 # 设置上传文件权限掩码
pasv_enable=YES # 启用被动模式(解决NAT环境连接问题)
pasv_min_port=1024 # 被动模式最小端口
pasv_max_port=1048 # 被动模式最大端口
anonymous_enable=NO # 禁止匿名用户登录(提升安全性)
xferlog_enable=YES # 开启传输日志(记录上传/下载行为)
connect_from_port_20=YES # 启用FTP数据连接端口20(符合RFC标准)
chroot_local_user=YES # 限制用户只能访问自己的主目录(增强隔离性)
EOF
# 创建FTP用户(示例用户为ftpuser,密码需交互式输入)
sudo adduser ftpuser
# 重启vsftpd服务使配置生效
sudo systemctl restart vsftpd
# 检查服务状态(确认运行正常)
sudo systemctl status vsftpd
echo "VSFTPD deployed successfully on Debian."
说明:脚本需保存为deploy_vsftpd.sh,通过chmod +x deploy_vsftpd.sh赋予执行权限,再以sudo ./deploy_vsftpd.sh运行。此方案适用于单台服务器的基础部署,可根据需求调整配置项(如修改pasv_min_port/pasv_max_port端口范围、添加更多用户等)。
二、使用Ansible实现批量自动化部署
若需在多台Debian服务器上批量部署vsftpd,可使用Ansible(基于SSH的无代理自动化工具)。以下是Ansible Playbook示例:
vsftpd_deploy.yml):---
- name: Deploy vsftpd on Debian servers
hosts: all # 目标服务器组(需在ansible inventory文件中定义)
become: yes # 以root权限执行任务
tasks:
# 安装vsftpd
- name: Install vsftpd package
apt:
name: vsftpd
state: present
update_cache: yes # 更新包缓存
# 部署配置文件(使用Jinja2模板,需提前创建templates/vsftpd.conf.j2)
- name: Configure vsftpd
template:
src: templates/vsftpd.conf.j2 # 模板文件路径
dest: /etc/vsftpd.conf # 目标路径
owner: root
group: root
mode: '0644'
notify: Restart vsftpd # 触发handler重启服务
# 确保vsftpd服务运行且开机自启
- name: Ensure vsftpd is running and enabled
service:
name: vsftpd
state: started
enabled: yes
handlers:
# 重启vsftpd服务的handler(当配置变更时触发)
- name: Restart vsftpd
service:
name: vsftpd
state: restarted
templates/vsftpd.conf.j2,内容参考基础脚本中的配置项,支持变量替换,如{{ vsftpd_pasv_min_port }});ansible-playbook -i inventory.ini vsftpd_deploy.yml
说明:Ansible的优势在于批量操作、幂等性(重复运行不会导致配置重复)及模块化设计,适合大规模服务器集群的自动化管理。
三、自动化脚本注意事项
anonymous_enable=NO(禁用匿名登录),避免未授权访问;chroot_local_user=YES(限制用户到主目录),防止用户越权访问系统文件;local_umask(如022)控制上传文件权限(默认644,即用户可读写、组和其他人只读);ssl_enable=YES及相关证书配置的注释)。ufw为例:sudo ufw allow 21/tcp # FTP控制端口
sudo ufw allow 1024:1048/tcp # 被动模式端口范围
sudo ufw enable # 启用防火墙
ftpuser)需设置强密码(避免使用弱密码如123456);若需批量添加用户,可通过循环结构(如for user in user1 user2; do sudo adduser $user; done)实现,或通过Ansible的user模块自动化。