当达到通道 0 上接受的子系统请求时,带有 -s 和 sftp 的 ssh 连接会挂起

当达到通道 0 上接受的子系统请求时,带有 -s 和 sftp 的 ssh 连接会挂起

我遇到了这个无法连接的奇怪问题ssh user@domain -s sftp

sshd_配置在目标指定时Subsystem sftp /usr/libexec/openssh/sftp-server,sftp 服务器文件就在那里,并且我在 /usr/bin、/usr/sbin 等中创建了指向它的符号链接,因此which sftp-server显示正确的可执行文件。

很简单sftp user@domainssh user@domain运行起来没有问题。

-vvv伸手debug2: subsystem request accepted on channel 0举起双手奔跑,直到我ctrl+c- 它。

目标上的 sshd 和客户端上的 ssh 没有任何遮蔽配置。

目标/var/log/secure完成[sshd]于:

sshd[324070]: debug3: send packet: type 99
sshd[324070]: debug3: mm_request_receive entering
sshd[324070]: debug3: monitor_read: checking request 124

sshd 日志显示连接没有错误。

sshd_config 仅为 sftp 定义了一个子系统参数,并且实际上整个配置都未经修改(默认)。

我尝试连接到这些目标操作系统:Red Hat 8.6、Ubuntu 22.04 和 MacOS 13.2.1(zsh 5.8.1)。

我希望能够使用 ssh 和-s来定义多个Subsystems。

基于此:https://www.oreilly.com/library/view/ssh-the-secure/0596008953/ch05s08.html我知道我使用此标志是正确的,因为所需的子系统应该作为远程命令放在 ssh 调用中。

如果我的用法有误,请纠正我,最好指出任何可能有助于完成这项工作的来源。

谢谢!

答案1

预计ssh user@domain -s sftp会“挂起”。SFTP 协议是二进制的。您几乎无法在ssh终端中与其对话。

如果您的目的是使用自定义子系统名称尝试/测试 SFTP,请使用-s带有以下内容的开关sftp

sftp [email protected] -s sftp

如果您想知道-s中的用途ssh:SSH 协议具有“子系统 API”。开关-s只是ssh该 API 的一个接口。SSH 中子系统 API 的唯一标准用途是 SFTP。在我看来,开关ssh -s在 SFTP 中没有实际用途,因为 SFTP 是二进制协议。据我所知,没有出现 SSH 子系统的其他标准用途。但 OpenSSHssh有开关,以防万一。还有许多其他ssh选项您可能永远不会使用。但它们就在那里,在极少数情况下您可能需要它们。

相关内容