OpenSSH:internal-sftp和sftp-server的区别

为什么有两种方法可以用OpenSSH设置SFTP,以及何时使用? 他们之间有什么区别?

我的意思是第一个使用OpenSSH的lib,第二个使用“使用内部”,所以它也是OpenSSH?

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

    根据sshd_config(5)手册页 , internal-sftp

    ChrootDirectory使用时,不需要支持文件的进程内sftp服务器。

    internal-sftp比独立的sftp-server二进制文件晚了很多,但现在是默认的。 它支持sftp-server所做的一切,并具有上述优势。

    另一个优点是性能,因为没有必要为SFTP运行新的进程。

    我相信没有理由使用sftp-server进行新的安装。


    对于依赖它的安装, sftp-server仍保持向后兼容性。

    例如,如果pipe理员依靠loginshellconfiguration来防止某些用户login。切换到internal-sftp将绕过限制,因为不再涉及loginshell。

    使用sftp-server二进制文件(作为一个独立的进程),你也可以使用一些黑客,比如在sudo下运行SFTP 。

    您可以将authorized_keylocking到外部sftp服务器。

      command =“/ usr / libexec / openssh / sftp-server”ssh-rsa AAAA ... == [email protected] 

    当你这样做,你的用户可以sftp,但不能scp或ssh:

      $ sftp主机:/ etc / group / tmp
    连接到主机...
    将/ etc / group提取到/ tmp / group
     / etc / group 100%870 0.9KB / s 00:00 

    试图做任何事情只会挂起:

      $ scp主机:/ etc / group / tmp
    被信号2杀死
    
     $ ssh主机正常运行
    被信号2杀死 

    唉,除非修改sshd_config,否则没有简单的方法可以将某个键locking到chroot。 这对用户来说是非常酷的,无需系统pipe理员的干预。