故障描述
分配了一台新的服务器,SSH链接正常使用,但是等我传文件的时候发现SFTP不好使,测试了多个SSH工具依旧是不能上传和下载。
查了一下资料,发现和工具啥的没关系,是sshd配置文件的事儿。
解决方案
经排查调试,非系统防火墙拦截,非 SELinux 阻断问题,更非端口及服务运行问题,属 sshd 配置文件的原因。
- 将sshd配置文件
/etc/ssh/sshd_config
中的/usr/libexec/openssh/sftp-server
信息更改为 OpenSSH 内置的 SFTP 服务器。
sudo vim /etc/ssh/sshd_config
Subsystem sftp /usr/libexec/openssh/sftp-server
# 将其修改为:
Subsystem sftp internal-sftp
- 然后重启sshd服务
sudo systemctl restart sshd
总结(摘抄)
- 为什么会出现这种问题呢?
某些情况下,内置 SFTP 服务器不依赖于外部路径,避免了路径配置错误或文件权限问题。外部的 sftp-server
可能会有兼容性问题或配置错误,导致 SFTP 服务无法正常工作,使用 internal-sftp
则可以避免这些问题出现额概率。且 internal-sftp
通常与 OpenSSH 的其他组件更好地集成,可提供更好的性能和兼容性。
- Ex:两种服务器配置有什么异同或优缺点呢?
Subsystem sftp /usr/libexec/openssh/sftp-server
-
- 外部 SFTP 服务器:这种方式使用了一个外部的 SFTP 服务器程序,通常是
/usr/libexec/openssh/sftp-server
。 - 工作原理:当 SSH 服务器接收到 SFTP 请求时,它会启动一个独立的
sftp-server
进程来处理 SFTP 会话。这个进程负责处理文件传输请求,并与客户端通信。 - 优点:灵活性较高,可以单独配置和调试
sftp-server
。 - 缺点:可能会引入额外的开销,因为每次 SFTP 会话都会启动一个新的进程。
- 外部 SFTP 服务器:这种方式使用了一个外部的 SFTP 服务器程序,通常是
Subsystem sftp internal-sftp
-
- 内部 SFTP 服务器:这种方式使用了 OpenSSH 内置的 SFTP 服务器。
- 工作原理:当 SSH 服务器接收到 SFTP 请求时,它会直接在现有的 SSH 进程中处理 SFTP 会话,而不启动额外的
sftp-server
进程。这使得 SFTP 会话更加高效,因为它减少了进程切换的开销。 - 优点:性能更好,因为不需要启动额外的进程。配置和管理也更简单。
- 缺点:灵活性较低,因为所有的 SFTP 处理都在 SSH 进程中进行,无法单独配置
sftp-server
。