SFTP依赖SSH服务运行,需确保sshd服务已启动并设置开机自启。执行以下命令:
sudo systemctl status sshd # 检查服务状态
sudo systemctl start sshd # 启动服务(若未运行)
sudo systemctl enable sshd # 设置开机自启
若服务未安装,需先安装OpenSSH服务器:
sudo yum install openssh-server -y
确保配置文件中SFTP子系统设置正确,且未注释关键参数:
sudo vi /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User sftpuser # 替换为你的SFTP用户名
ChrootDirectory /data/sftp/%u # 用户根目录(需绝对路径)
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
修改后重启SSH服务使配置生效:
sudo systemctl restart sshd
CentOS默认使用firewalld,需允许SSH(端口22)流量:
sudo firewall-cmd --list-all # 查看当前规则(确认包含ssh服务)
sudo firewall-cmd --permanent --add-service=ssh # 添加ssh服务(永久生效)
sudo firewall-cmd --reload # 重新加载规则
若使用传统iptables,可执行:
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT # 允许端口22
sudo service iptables save # 保存规则(CentOS 7及以上可能无需此步)
SELinux可能限制SFTP访问,需检查其状态并调整:
sestatus # 查看SELinux状态(若为Enforcing,需调整)
sudo setenforce 0
/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled。sudo semanage fcontext -a -t ssh_chroot_rw_t "/data/sftp(/.*)?" # 添加上下文(若使用chroot)
sudo restorecon -Rv /data/sftp # 恢复上下文
ping <服务器IP地址> # 确认网络可达
telnet <服务器IP地址> 22 # 若提示“Connected”,则端口开放
# 或使用nc命令(若未安装,sudo yum install nc -y)
nc -zv <服务器IP地址> 22
若端口不通,需检查服务器防火墙、路由器ACL或云服务商安全组设置。
ssh <用户名>@<服务器IP地址>
root所有,权限为755:sudo chown root:root /home/<用户名>
sudo chmod 755 /home/<用户名>
root所有,权限为755,且用户不能有写权限:sudo mkdir -p /data/sftp/<用户名>
sudo chown root:root /data/sftp/<用户名>
sudo chmod 755 /data/sftp/<用户名>
sudo usermod -G sftp <用户名> # 将用户加入sftp组
sudo passwd <用户名> # 确保用户密码有效
若以上步骤未解决,可通过日志获取详细错误信息:
sudo tail -f /var/log/secure # CentOS 7及以上
# 或
sudo tail -f /var/log/auth.log # 部分旧版本
常见日志错误及对应解决:
top命令),或调整SSH超时设置(/etc/ssh/sshd_config中ClientAliveInterval)。sudo netstat -tulnp | grep 22
若被占用,可修改SSH端口(/etc/ssh/sshd_config中Port参数)并重启服务。aes256-ctr),避免因算法不兼容导致连接失败。