【OpenSSH】internal-sftp和sftp-server之间的区别和联系什么?
摘自:https://www.jianshu.com/p/f24d8ca565d7
一、问题
为什么有两种方法可以使用OpenSSH设置SFTP以及何时使用哪种方法? 它们之间有什么区别吗?
我的意思是第一个使用OpenSSH的lib,第二个使用“使用内部”,所以它也属于OpenSSH?

二、解答
sftp-server和internal-sftp都是OpenSSH的一部分。
sftp-server是一个独立的二进制文件, internal-sftp只是一个配置关键字,告诉sshd使用内置sshd的SFTP服务器代码,而不是运行另一个进程(通常是sftp-server)。
从功能的角度来看,sftp-server和internal-sftp几乎完全相同。 它们是使用相同的源代码构建的。
internal-sftp的主要优点是,当与ChrootDirectory指令一起使用时,它不需要任何支持文件。
sshd_config(5)手册页:
对于Subsystem指令:
指定sftp-server实现SFTP文件传输子系统或者internal-sftp实现进程内SFTP服务,这可以简化使用ChrootDirectory强制配置以在客户端上强制使用不同的文件系统root的配置。
对于ForceCommand指令:
指定internal-sftp命令将强制使用与ChrootDirectory一起使用时不需要支持文件的进程内SFTP服务。
对于ChrootDirectory指令:
ChrootDirectory必须包含支持用户会话所需的文件和目录。对于交互式会话,这至少需要一个shell(通常是sh)和基本/ dev节点,例如null,zero,stdin,stdout,stderr和tty设备。对于使用SFTP的文件传输会话,如果使用进程内sftp服务器,则无需对环境进行其他配置,但使用日志记录的会话可能需要在某些操作系统上的chroot目录中使用/ dev / log(请参阅sftp-server以获取细节)。
internal-sftp的另一个优点是性能,因为没有必要为它运行新的子进程。
internal-sftp在很晚的时候被添加(2008年的OpenSSH 4.9p1?),而不是独立的sftp-server二进制文件,但它现在是默认的,我相信没有理由将sftp-server用于新安装。
sshd在遇到sftp-server时可以自动使用internal-sftp,因为功能相同而且internal-sftp甚至具有上述优点,但是在一些情况下,存在差异。
几个例子:
1.管理员可能依赖登录shell配置来阻止某些用户登录。切换到internal-sftp会绕过限制,因为不再涉及登录shell。
2.使用sftp-server二进制文件(作为一个独立的进程),你可以使用一些hacks,比如在sudo下运行SFTP。
3.对于SSH-1(如果有人仍在使用它),则根本不涉及Subsystem指令,使用SSH-1的SFTP客户端明确告知服务器,服务器应运行什么二进制文件。 因此,传统的SSH-1 SFTP客户端具有硬编码的sftp服务器名称。
三、参考
How to log internal-sftp chroot jailed users?
https://access.redhat.com/discussions/672633
SFTP chroot
https://wiki.archlinux.org/index.php/SFTP_chroot
How do I change user after login (e.g. su root)?
https://winscp.net/eng/docs/faq_su#sudo
OpenSSH的SFTP服务器设置
https://caibaoz.com/blog/2013/04/27/sftp_config_for_openssh
OpenSSH:internal-sftp和sftp-server之间的区别
https://codeday.me/bug/20181105/355509.html
OpenBSD manual page server
https://man.openbsd.org/sftp-server
sftp-server(8) - Linux man page
https://linux.die.net/man/8/sftp-server
Which internal-sftp options are available?
https://superuser.com/questions/1114958/which-internal-sftp-options-are-available
How to Configure Chroot Environments for SFTP Access on Ubuntu 16.04?
OpenSSH: Difference between internal-sftp and sftp-server
https://serverfault.com/questions/660160/openssh-difference-between-internal-sftp-and-sftp-server/660325
Restricting Users To SFTP Plus Setting Up Chrooted SSH/SFTP
https://www.howtoforge.com/restricting-users-to-sftp-plus-setting-up-chrooted-ssh-sftp-debian-squeeze
SFTP Server Chroot Configuration
http://www.yolinux.com/TUTORIALS/SFTP-Server-Chroot-Configuration.html
SDB:SFTP server with Chroot
https://en.opensuse.org/SDB:SFTP_server_with_Chroot
Logging sFTP activity for chrooted users
https://www.the-art-of-web.com/system/sftp-logging-chroot
How to set the sftp -s subsystem option in a configuration file?
https://unix.stackexchange.com/questions/32307/how-to-set-the-sftp-s-subsystem-option-in-a-configuration-file
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)