温馨提示×

怎样调试linux sftp

小樊
49
2026-09-26 05:33:15
栏目: 智能运维

调试 Linux 上的 SFTP(基于 SSH 的文件传输)通常从服务端和客户端两个方向入手。下面按“从简单到深入”的方式给你一份实用调试指南。


一、先确认基本环境

1. 检查 SFTP 服务是否运行

SFTP 依赖 sshd:

systemctl status sshd
# 或
service ssh status

确保服务是 active (running)。

2. 确认端口与连通性

默认端口是 22:

telnet server_ip 22
# 或
nc -vz server_ip 22

如果不能连通,检查:

  • 防火墙(iptables / firewalld)
  • 云服务器安全组
  • SSH 是否监听正确地址

二、客户端调试(最常用)

1. 使用 verbose 模式

sftp -v user@host

更详细:

sftp -vvv user@host

重点看:

  • 是否成功建立 SSH 连接
  • 认证方式(password / pubkey)
  • 是否进入 sftp> 提示符

三、服务端调试(sshd)

1. 临时前台调试 sshd(推荐)

不要直接杀掉生产 sshd,用调试模式另起一个:

/usr/sbin/sshd -p 2222 -d

然后从客户端连接:

sftp -P 2222 user@host

-d 表示 debug 模式(单连接)
-D 表示不 daemon 化(持续运行)

日志会直接打印在终端,能清楚看到:

  • 用户认证过程
  • SFTP subsystem 是否加载
  • 权限问题

2. 检查 sshd 配置

编辑:

/etc/ssh/sshd_config

确认:

Subsystem sftp internal-sftp

或:

Subsystem sftp /usr/lib/openssh/sftp-server

常见限制示例:

Match User sftpuser
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no

修改后:

sshd -t   # 校验配置
systemctl restart sshd

四、权限问题(非常常见)

Chroot 目录权限要求

如果使用 ChrootDirectory:

  • 必须是 root 拥有
  • 其他用户不可写
chown root:root /data/sftp
chmod 755 /data/sftp

用户实际目录:

mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload

五、日志分析

1. 系统日志

journalctl -u sshd -f

或:

tail -f /var/log/auth.log      # Debian/Ubuntu
tail -f /var/log/secure        # CentOS/RHEL

常见错误:

  • Permission denied
  • bad ownership or modes for chroot
  • subsystem request failed

六、常见故障速查表

现象 可能原因
连不上 防火墙 / 端口 / sshd 未运行
能 SSH 不能 SFTP subsystem 配置错误
登录后立刻断开 ForceCommand / Chroot 错误
写文件失败 目录权限不对
公钥登录失败 authorized_keys 权限错误

七、快速测试示例

# 服务端
/usr/sbin/sshd -p 2222 -d

# 客户端
sftp -P 2222 -vvv testuser@127.0.0.1

如果你愿意,可以告诉我:

  • 是 客户端连不上 还是 服务端配置问题
  • 使用的是 密码 / 密钥
  • 是否使用了 Chroot / 限定 SFTP 用户

我可以直接帮你定位具体配置。

0 踩