SFTP基于SSH协议运行,若SSH服务未启动,SFTP连接必然失败。使用以下命令确认SSH服务状态:
sudo systemctl status sshd
若服务未运行,启动服务并设置开机自启:
sudo systemctl start sshd
sudo systemctl enable sshd
若启动失败,需通过journalctl -xeu sshd.service
查看详细日志定位原因(如端口冲突、配置错误等)。
SFTP的核心配置位于/etc/ssh/sshd_config
,需重点检查以下内容:
Subsystem sftp /usr/libexec/openssh/sftp-server # 传统方式
# 或
Subsystem sftp internal-sftp # 推荐(内置SFTP,无需额外进程)
sshd -t
命令测试语法是否正确(无输出则表示正常):sudo sshd -t
若语法有误,根据提示修正(如无效参数、未闭合引号等),再重启SSH服务:
sudo systemctl restart sshd
```。
### **3. 检查防火墙设置**
CentOS默认使用`firewalld`管理防火墙,需确保放行SSH/SFTP端口(默认22):
```bash
# 查看防火墙状态
sudo systemctl status firewalld
# 放行SSH端口(若未放行)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
若使用iptables,需添加对应规则:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo service iptables save
```。
### **4. 查看系统日志定位具体错误**
日志是排查连接问题的关键,通过`/var/log/secure`(CentOS 7及以下)或`journalctl`查看SSH相关日志:
```bash
# 实时查看SSH日志
sudo tail -f /var/log/secure
# 或使用journalctl过滤SSH日志
sudo journalctl -u sshd -xe
日志中会明确提示连接失败的原因(如“Permission denied”“Connection refused”“Invalid configuration”等),根据提示针对性解决。
sudo chown root:root /home/username
sudo chmod 755 /home/username
Enforcing
模式,需调整策略允许SFTP访问:# 临时设置为Permissive模式测试
sudo setenforce 0
# 若问题解决,永久修改SELinux配置
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
AllowGroups
或DenyGroups
,需确保用户属于允许的组:AllowGroups sftpusers # 示例:仅允许sftpusers组的用户登录
```。
ping
命令测试服务器IP是否可达:ping server_ip
telnet
或nc
命令测试22端口是否开放:telnet server_ip 22
# 或
nc -zv server_ip 22
若端口不通,需检查防火墙、路由器或云服务器安全组设置。
/etc/ssh/sshd_config
中的MaxStartups
参数(默认10:30:100,表示允许最多10个并发未认证连接,30%的并发认证连接,最多100个总连接),若连接数超过限制,修改参数并重启SSH:MaxStartups 10000 # 放宽限制
top
或htop
命令检查服务器内存、CPU使用率,若资源耗尽,需优化系统或升级配置。确保客户端使用的用户名、密码正确,且未启用“仅公钥认证”(若客户端配置了PasswordAuthentication no
,需改为yes
)。此外,检查客户端防火墙是否阻止了SFTP连接。