Linux服务器SFTP无法连接登录
故障描述
日常运维测试的一台Alma Linux 9.4
环境,使用SSH远程正常使用;但需要传输文件时,发现SFTP服务不可用,测试多个SSH远程工具都不能正常显示文件资源,也不能上传下载。
解决方案
经排查调试,非系统防火墙拦截,非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服务已恢复正常,在权限正确的目录下即可正常上传和下载。
Ex: SFTP-ClI使用
- 使用命令行工具登录连接
sftp user@hostname
连接成功后,可以使用以下命令进行文件操作:
get <remote-file> <local-file>
:下载文件put <local-file> <remote-file>
:上传文件cd <directory>
:切换目录lcd <directory>
:切换本地目录mkdir <directory>
:创建目录rm <file>
:删除文件rmdir <directory>
:删除目录ls
:列出目录内容exit
:退出 SFTP 会话- 使用图形化工具
有许多图形化的 SFTP 客户端工具,如:
- FileZilla:一款流行的开源 FTP/SFTP 客户端,支持拖放操作。
- WinSCP:适用于 Windows 的图形化 SFTP 客户端,支持文件管理、同步等功能。
- Cyberduck:适用于 macOS 和 Windows 的图形化 SFTP 客户端,界面友好。
总结
- 为什么会出现这种问题呢?
某些情况下,内置 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
。
部分参考来源:https://halo.sherlocky.com/archives/linuxfu-wu-qi-wu-fa-lian-jie-sftp