本文目录导读:

是的,可以编写脚本自动配置SFTP服务,以下是一个适用于Linux系统的Shell脚本示例,能自动完成SFTP服务的安装、用户创建和权限配置:
#!/bin/bash
# SFTP自动配置脚本
# 支持CentOS/RHEL 7+、Ubuntu 18.04+
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查root权限
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}错误:请使用root权限运行此脚本${NC}"
exit 1
fi
echo -e "${GREEN}=== SFTP服务自动配置脚本 ===${NC}"
# 变量配置
SFTP_USER="sftpuser" # SFTP用户
SFTP_GROUP="sftpgroup" # SFTP组
SFTP_HOME="/data/sftp" # 根目录
SSH_PORT=22 # SSH端口
CHROOT_DIR="/data/sftp" # 限制目录
# 1. 检测系统并安装OpenSSH
echo -e "${YELLOW}[1/6] 检测系统并安装必要组件...${NC}"
if [ -f /etc/redhat-release ]; then
# CentOS/RHEL
yum install -y openssh-server openssh-clients
systemctl enable sshd
elif [ -f /etc/lsb-release ] || [ -f /etc/debian_version ]; then
# Ubuntu/Debian
apt-get update
apt-get install -y openssh-server
systemctl enable ssh
else
echo -e "${RED}不支持的Linux发行版${NC}"
exit 1
fi
# 2. 创建SFTP组和用户
echo -e "${YELLOW}[2/6] 创建SFTP用户和组...${NC}"
# 创建组(如果不存在)
if ! getent group "$SFTP_GROUP" > /dev/null 2>&1; then
groupadd "$SFTP_GROUP"
echo -e "${GREEN}已创建组: $SFTP_GROUP${NC}"
fi
# 创建用户(如果不存在)
if ! id "$SFTP_USER" > /dev/null 2>&1; then
# 创建用户,无登录shell,主目录在根目录下
useradd -g "$SFTP_GROUP" -d "/$SFTP_USER" -s /sbin/nologin "$SFTP_USER"
# 设置密码(建议后续手动修改)
echo "${SFTP_USER}:Chang3Th1s!" | chpasswd
echo -e "${YELLOW}警告:默认密码为 Chang3Th1s!,建议首次登录后修改${NC}"
echo -e "${GREEN}已创建用户: $SFTP_USER${NC}"
else
echo -e "${YELLOW}用户 $SFTP_USER 已存在,跳过创建${NC}"
fi
# 3. 创建SFTP目录结构
echo -e "${YELLOW}[3/6] 创建SFTP目录结构...${NC}"
# 创建根目录
mkdir -p "$SFTP_HOME"
# 创建用户专属上传目录
USER_DIR="$SFTP_HOME/$SFTP_USER/upload"
mkdir -p "$USER_DIR"
# 设置权限(重要!根目录必须属于root)
chown root:root "$SFTP_HOME"
chmod 755 "$SFTP_HOME"
# 用户目录权限
chown "$SFTP_USER:$SFTP_GROUP" "$SFTP_HOME/$SFTP_USER"
chmod 755 "$SFTP_HOME/$SFTP_USER"
# 上传目录权限
chown "$SFTP_USER:$SFTP_GROUP" "$USER_DIR"
chmod 755 "$USER_DIR"
echo -e "${GREEN}目录结构已创建于: $SFTP_HOME${NC}"
echo "├── $SFTP_HOME (root:root)"
echo "│ └── $SFTP_USER ($SFTP_USER:$SFTP_GROUP)"
echo "│ └── upload ($SFTP_USER:$SFTP_GROUP)"
# 4. 配置SSH服务(仅SFTP)
echo -e "${YELLOW}[4/6] 配置SSH服务...${NC}"
# 备份原配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d_%H%M%S)
# 在文件末尾添加SFTP配置
cat >> /etc/ssh/sshd_config << EOF
# === SFTP 配置开始 ===
# 覆盖Subsystem配置
Subsystem sftp internal-sftp
# 限制SFTP用户组
Match Group $SFTP_GROUP
ChrootDirectory $CHROOT_DIR/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
PasswordAuthentication yes
# === SFTP 配置结束 ===
EOF
echo -e "${GREEN}SSH配置已更新${NC}"
# 5. 重启SSH服务
echo -e "${YELLOW}[5/6] 重启SSH服务...${NC}"
if systemctl restart sshd || systemctl restart ssh; then
echo -e "${GREEN}SSH服务已重启${NC}"
else
echo -e "${RED}警告:SSH服务重启失败,请手动检查${NC}"
exit 1
fi
# 6. 显示结果和测试信息
echo -e "\n${GREEN}========================================${NC}"
echo -e "${GREEN} SFTP服务配置完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "连接信息:"
echo -e " 主机: $(curl -s ifconfig.me || hostname -I | awk '{print $1}')"
echo -e " 端口: $SSH_PORT"
echo -e " 用户: $SFTP_USER"
echo -e " 密码: Chang3Th1s!"
echo ""
echo -e "目录结构:"
echo -e " / (仅可查看)"
echo -e " └── upload/ (可读写)"
echo ""
echo -e "测试命令:"
echo -e " sftp -oPort=$SSH_PORT ${SFTP_USER}@<服务器IP>"
echo ""
echo -e "${YELLOW}安全建议:${NC}"
echo -e " 1. 使用 ssh-keygen 生成密钥对"
echo -e " 2. 修改密码或禁用密码登录"
echo -e " 3. 修改SSH默认端口(可选)"
echo -e " 4. 查看完整配置: cat /etc/ssh/sshd_config"
使用方法
-
保存脚本:
vi configure_sftp.sh # 粘贴脚本内容并保存
-
赋予执行权限:
chmod +x configure_sftp.sh
-
运行脚本:
sudo ./configure_sftp.sh
脚本功能说明
- ✅ 自动检测:支持CentOS/RHEL和Ubuntu/Debian
- ✅ 用户管理:创建专有SFTP用户和组
- ✅ 目录隔离:使用ChrootDirectory限制用户目录
- ✅ 权限正确:自动设置严格的目录权限
- ✅ 安全加固:禁用shell访问,限制端口转发
- ✅ 配置备份:备份原sshd_config文件
手动配置要点(如果你需要自定义)
修改配置文件
编辑 /etc/ssh/sshd_config:
# 确保以下行正确
Subsystem sftp internal-sftp
# 用户组限制
Match Group sftpgroup
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PermitTTY no
目录权限黄金法则
/data/sftp -> root:root (755)
/data/sftp/user -> root:root (755) # 必须root
/data/sftp/user/upload -> user:sftpgroup (755)
安全强化建议
# 禁用密码登录(仅使用密钥) PasswordAuthentication no # 限制IP访问(仅允许特定IP) Match Address 192.168.1.0/24
验证是否成功
# 测试连接 sftp -oPort=22 sftpuser@localhost # 检查进程 ps aux | grep sftp # 查看日志 tail -f /var/log/auth.log # Debian/Ubuntu tail -f /var/log/secure # CentOS/RHEL
这个脚本提供了一个完整的SFTP自动化配置方案,可直接用于生产环境,如果需要更复杂的配置(如多用户、配额限制、日志审计等),可以在此基础上扩展。