我已sftp-server
在 Ubuntu 电脑上禁用,如下所示。
编辑/etc/ssh/sshd_config
并注释掉此行
#Subsystem sftp /usr/lib/openssh/sftp-server
在另一台计算机上,我运行sftp
命令连接服务器。连接失败。
sftp [email protected]
subsystem request failed on channel 0
Connection closed
我也使用 FileZilla 连接到该计算机。FileZilla 仍列出文件夹内容、下载文件……
Filezilla 显示 URL:sftp://[email protected]
Filezilla 使用哪种方法连接 SSH 服务器来传输文件?
答案1
FileZilla 内部使用 PuTTY PSFTP。当通过子系统启动失败时,PSFTP 具有启动 SFTP 服务器的后备机制sftp
。
sftp-server
它在常见路径(如/usr/lib/sftp-server
和/usr/local/lib/sftp-server
和)中查找二进制文件PATH
。我假设这就是 PSFTP/FileZilla(和其他客户端,如我的 WinSCP - 参见其SFTP 要求页面有关详细信息,即使您禁用子系统,也将能够建立 SFTP 连接sftp
。
使用 OpenSSH,sftp
你可以使用以下方法实现相同的效果:-s
转变:
-s subsystem | sftp_server
指定 SSH2 子系统或sftp 服务器的路径在远程主机上。当远程 sshd 没有配置 sftp 子系统时,路径很有用。
例子:
sftp -s /usr/lib/sftp-server [email protected]
要完全禁止 SFTP,您需要完全摆脱sftp-server
二进制。
虽然这实际上没有什么意义。如果你允许 shell 访问(你这样做,否则后备机制将不起作用),那么禁用 SFTP 就毫无意义了,因为无论如何,人们都可以使用 shell 访问做更多的事情(造成更多损害)。
我认为回退机制基本上是为了支持没有子系统机制的 SSH-1 服务器。但即使在像您这样的情况中,它也会发挥作用。