在 Linux 下使用 SFTP 本身就具备加密能力,但很多人会混淆“传输加密”“文件加密”和“密钥认证”。下面分层次说明 SFTP 怎样加密,以及常见安全做法。
SFTP = SSH File Transfer Protocol
只要你是这样用的:
sftp user@host
或者:
sftp -P 22 user@host
✅ 用户名、密码、文件内容全程都是加密的
✅ 基于 SSH(通常是 SSH-2)
⚠️ 注意:
- FTP(21端口)是明文,不加密
- FTPS(FTP over SSL)≠ SFTP
- SFTP 是 SSH 子协议
在 /etc/ssh/sshd_config 中限制加密算法(增强安全性):
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-256,hmac-sha2-512
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256
修改后重启:
systemctl restart sshd
ssh-keygen -t ed25519
ssh-copy-id user@host
/etc/ssh/sshd_config:
PasswordAuthentication no
✅ 即使网络被监听,也无法破解登录
如果你担心:
“服务器管理员能看到我的文件”
可以 在传输前加密文件:
gpg -c file.txt
生成 file.txt.gpg,再 SFTP 上传
解密:
gpg file.txt.gpg
openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc
防止用户访问系统其他目录:
Match User sftpuser
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
✅ 用户只能看到自己的目录
✅ 即使被入侵,影响范围小
Port 2222
✅ SFTP 默认就是加密的
✅ 用密钥登录更安全
✅ 敏感文件可再用 GPG/OpenSSL 加密
✅ 服务器配置可进一步加固
如果你愿意,我可以:
你现在是客户端还是服务器管理员?