我遇到了这个无法连接的奇怪问题ssh user@domain -s sftp
。
sshd_配置在目标指定时Subsystem sftp /usr/libexec/openssh/sftp-server
,sftp 服务器文件就在那里,并且我在 /usr/bin、/usr/sbin 等中创建了指向它的符号链接,因此which sftp-server
显示正确的可执行文件。
很简单sftp user@domain
,ssh 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
来定义多个Subsystem
s。
基于此: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
选项您可能永远不会使用。但它们就在那里,在极少数情况下您可能需要它们。