SFTP(SSH File Transfer Protocol)基于SSH協議運行,故障排查需圍繞網絡連通性、服務狀態、配置正確性、權限設置、日志分析五大核心方向展開。以下是具體步驟:
首先確認客戶端與服務器之間的網絡可達性及端口連通性:
ping <服務器IP>
命令,若無法ping通,需檢查網絡線路、路由器配置或服務器IP是否正確。telnet <服務器IP> 22
或nc -zv <服務器IP> 22
命令,若端口不通,可能是防火墻攔截或SSH服務未監聽該端口。SFTP依賴SSH服務運行,需確保SSH服務已啟動并正常運行:
sudo systemctl status sshd
(部分系統為ssh
),若服務未運行,使用sudo systemctl start sshd
啟動。sudo systemctl enable sshd
確保服務重啟后自動啟動。SFTP的配置主要在/etc/ssh/sshd_config
文件中,需確認以下關鍵設置:
Subsystem sftp /usr/lib/openssh/sftp-server
(或/usr/libexec/openssh/sftp-server
,取決于系統版本)未被注釋(無#
前綴),該配置定義了SFTP的服務路徑。ChrootDirectory
(限制用戶根目錄),需確保路徑存在且權限正確(如/var/sftp/username
的owner為root
,權限為755
)。sudo systemctl restart sshd
使更改生效。防火墻或SELinux可能攔截SFTP流量(默認端口22):
firewalld
,執行sudo firewall-cmd --permanent --add-service=ssh
(或--add-port=22/tcp
),然后sudo firewall-cmd --reload
。iptables
,執行sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
并保存規則(如sudo service iptables save
)。sestatus
(若為Enforcing
,需調整策略)。Permissive
模式測試:sudo setenforce 0
(重啟后恢復Enforcing
)。/etc/selinux/config
,將SELINUX=enforcing
改為SELINUX=permissive
。chroot
,需執行sudo restorecon -Rv /var/sftp/username
恢復SELinux上下文。SFTP用戶的權限設置直接影響訪問:
id <用戶名>
確認用戶是否存在,若不存在需創建(sudo useradd -m <用戶名>
)。/home/username
)的權限需為755
(drwxr-xr-x
),owner為該用戶(chown username:groupname /home/username
)。若使用chroot
,目錄owner必須為root
。user_home_dir_t
(ls -Z /home/username
),若不符,執行sudo chcon -t user_home_dir_t /home/username
。日志是排查故障的關鍵,SFTP相關日志通常位于:
/var/log/secure
(CentOS/RHEL)或/var/log/auth.log
(Ubuntu/Debian)。sudo tail -f /var/log/secure
(或對應日志文件),過濾sftp
關鍵字(grep "sftp" /var/log/secure
),可獲取連接失敗的具體原因(如“Permission denied”“Invalid user”)。若上述步驟無法定位問題,可使用SSH調試模式獲取詳細連接信息:
ssh -vvv <用戶名>@<服務器IP>
,終端會輸出詳細的連接過程(如密鑰交換、認證步驟、配置加載),根據提示可快速定位問題(如“no matching key exchange method found”需調整加密算法)。top
命令)或防火墻規則(是否攔截ICMP或SSH端口)。chmod 755
或chmod 775
),且SELinux未阻止訪問。sudo netstat -tulnp | grep 22
或sudo ss -tulnp | grep 22
檢查端口占用進程,修改/etc/ssh/sshd_config
中的Port
為其他端口(如2222
)并重啟服務。通過以上步驟,可系統性排查Linux環境下SFTP的常見故障。若問題仍未解決,建議結合日志信息或尋求專業技術支持。