
你有没有遇到这种情况:FTP 上传老是失败?内网传输日志经常被拦截?最气的是安全部门说你那套文件传输方式“明文传输,不合规”。那好吧,现在是时候扔掉老掉牙的 FTP,来点靠谱的了——SFTP。
等等,SFTP 是啥?SSH 的“升级版”?不,是你服务器通信里那把真正的保险锁。今天就带你 5 分钟搞定它,尤其是在腾讯云 Linux 云服务器环境下,手把手实战部署,从基础到加固,连飞书邮件告警都给你安排上。
你以为你在安全传文件,其实只是“裸奔传情书”
FTP 之所以慢慢从舞台中央消失,不是因为它不能用,而是因为它太容易被“抓”了。账号密码是明文、数据通道是明文、操作日志是明文——你上传个重要配置文件,就跟直播一样让黑客“观看”。
那你可能想,SFTP 是不是很麻烦?错了。SFTP 本质上就是 SSH 的“顺手牵羊”服务,只要你服务器能 SSH,就能直接用 SFTP。简单、轻量、安全,还不吃资源,妥妥的香饽饽。
第一步:准备好你的腾讯云 Linux 云服务器
别跟我说你还没买服务器,去腾讯云搞一台轻量应用服务器,两核 4G、5Mbps 带宽足够你日常文件传输和测试用了。
系统推荐:CentOS 7+、Ubuntu 20.04+,其实只要支持 OpenSSH
就行。
确保你能正常通过 SSH 登录服务器,比如:
bashssh root@your-server-ip
如果你 SSH 登录都搞不定,就先别折腾 SFTP 了,基础网络先捋顺。
第二步:检查并启动 SSH 服务(其实 SFTP 已内置)
SFTP 是通过 SSH 实现的,不需要额外安装服务,核心是 sshd
。
查看是否安装 OpenSSH:
bashrpm -qa | grep openssh # CentOS
dpkg -l | grep openssh # Ubuntu
确认 sshd 正在运行:
bashsystemctl status sshd
如果没运行:
bashsystemctl start sshd
systemctl enable sshd
说白了,只要你服务器能用 SSH,那你就“天生”拥有 SFTP。
第三步:创建 SFTP 用户并设置权限(最容易出锅的一步)
我们不能让用户用 root 登录传文件,这太危险。那该怎么做呢?我们新建一个专门传文件的用户,并把他“圈”在一个目录里,别乱跑。
bash# 创建用户并设置主目录
useradd sftpuser -d /data/sftp/sftpuser -s /sbin/nologin
passwd sftpuser
# 创建上传目录
mkdir -p /data/sftp/sftpuser/upload
chown -R sftpuser:sftpuser /data/sftp/sftpuser/upload
# 修改主目录权限(必须 root 拥有)
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
用户能上传文件,但不能用 shell,这就相当于“禁言了聊天窗口,只能发快递”。
第四步:配置 SSH 允许该用户通过 SFTP 登录
编辑 SSH 配置文件:
bashvim /etc/ssh/sshd_config
在末尾添加:
bashMatch User sftpuser
ForceCommand internal-sftp
ChrootDirectory /data/sftp/%u
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
意思是:这个用户一登录 SSH,立马被重定向进 SFTP,而且只能访问 /data/sftp/sftpuser
,其他地方哪都不能去。
重启 SSH 服务:
bashsystemctl restart sshd
第五步:本地验证连接与传输(用 WinSCP 或命令行都行)
📥 用命令行测试:
bashsftp sftpuser@your-server-ip
🖥️ 用 WinSCP 测试:
- 协议选择:SFTP
- 用户名密码填写你刚创建的
sftpuser
- 登录后默认进入
/upload
目录
你会发现整个流程就像在浏览本地文件夹一样。传文件速度不比 FTP 差,还稳得一批。
第六步:开启实时告警机制(飞书、邮件随你挑)
传文件虽好,但你怎么知道谁传了啥?有没有被爆破?有没有异常登录?
我们搞一套最简单的登录监控 + 文件操作告警机制。
💡 登录行为监控脚本(写入 /usr/local/bin/sftp-login-monitor.sh
)
bash#!/bin/bash
tail -Fn0 /var/log/secure | \
while read line; do
echo "$line" | grep "sftpuser.*Accepted password" > /dev/null
if [ $? = 0 ]; then
curl -X POST https://open.feishu.cn/webhook/your_webhook_url \
-H "Content-Type: application/json" \
-d "{\"msg_type\":\"text\",\"content\":{\"text\":\"SFTP 登录提醒:$line\"}}"
fi
done
然后后台运行:
bashnohup bash /usr/local/bin/sftp-login-monitor.sh &
你也可以接入邮件系统,用 mailx
告警。甚至结合 inotify
监控 /upload
目录是否有新文件上传、删改等操作。
第七步:加固安全细节,防爆破、防越权、防滥用
- 开启 Fail2ban 防 SSH 爆破
- 设置登录速率限制(如 1 分钟 3 次)
- 使用公钥登录 + 禁用密码认证
- 定期清理上传目录 + 日志轮转
你还可以通过配置审计日志,把所有上传、删除操作记录下来,方便溯源。
一体化部署脚本(进阶运维玩家福利)
当然,如果你懒得每台服务器手动搞,下面这段 Shell 脚本可以一次性搞定:
bash#!/bin/bash
useradd sftpuser -d /data/sftp/sftpuser -s /sbin/nologin
echo "sftpuser:YourPassword123" | chpasswd
mkdir -p /data/sftp/sftpuser/upload
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
chown -R sftpuser:sftpuser /data/sftp/sftpuser/upload
cat >> /etc/ssh/sshd_config <<EOF
Match User sftpuser
ForceCommand internal-sftp
ChrootDirectory /data/sftp/%u
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
EOF
systemctl restart sshd
为什么企业用户都开始用 SFTP?
- 安全合规:不止加密,还能审计、限制行为,符合等保要求。
- 传输稳定:和 SSH 同级别稳定性,断点续传、自动重连更靠谱。
- 配置灵活:你可以配置每个用户的根目录、权限、访问窗口。
- 轻量省资源:不像 NFS、SMB 那样吃资源,不用搭配重服务。
你该怎么用这套方案?
- 日常文件同步、备份服务器
- 配置拉取中心(多个节点向 SFTP 主机汇总日志/配置)
- 客户临时上传文件网关
- 和 Jenkins、Ansible 等自动化工具集成
如果你不搞 SFTP,你可能会遇到这些坑:
- FTP 被运营商 NAT 阻断,传输失败
- SCP 不支持目录浏览,用户体验差
- 网盘挂载速度慢,带宽不可控
- 文件传输日志缺失,出事找不到元凶
所以现在该问一句了:你还在用明文 FTP 吗?