在 CentOS 上测试 SFTP 连接,可以从本机测试和远程测试两个角度来做。下面按常见场景给你一套完整方法。
SFTP 一般由 OpenSSH 提供,先确认服务状态:
systemctl status sshd
如果未启动:
systemctl start sshd
systemctl enable sshd
确认端口(默认 22):
ss -lntp | grep ssh
sftp username@localhost
或指定端口:
sftp -P 22 username@localhost
✅ 成功示例:
sftp>
❌ 常见失败:
Connection refused → sshd 未启动Permission denied → 用户名/密码错误Connection closed → 权限或 SELinux 问题SFTP 依赖 SSH,先确认 SSH 是否通:
ssh username@localhost
如果 SSH 能连,SFTP 基本没问题。
sftp username@服务器IP
指定端口:
sftp -P 2222 username@服务器IP
sftp username@服务器IP
ssh -v username@服务器IP
查看是否有:
Authentication succeeded
echo "quit" | sftp username@服务器IP
或:
sftp -oBatchMode=yes username@服务器IP <<< "quit"
firewall-cmd --list-ports
firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --reload
iptables -L -n
getenforce
如果是 Enforcing,可临时测试:
setenforce 0
如果关闭后 SFTP 正常,说明是 SELinux 问题。
journalctl -u sshd -f
或:
tail -f /var/log/secure
| 错误 | 原因 |
|---|---|
| Connection refused | sshd 未启动 / 防火墙 |
| Permission denied | 用户名/密码错误 |
| Connection closed | 用户被禁止 / shell 问题 |
| Broken pipe | 网络 / 防火墙 |
如果用户被限制为 SFTP-only:
grep username /etc/passwd
查看 shell 是否为:
/bin/false
/usr/sbin/nologin
搭配 /etc/ssh/sshd_config:
Subsystem sftp internal-sftp
Match User username
ChrootDirectory /data/sftp
ForceCommand internal-sftp
如果你愿意,可以告诉我:
cat /etc/centos-release)我可以直接帮你定位问题。