Sftp“子系统请求在通道 0 上失败”错误

Sftp“子系统请求在通道 0 上失败”错误

我正在尝试使用名为“ssh2”的 Nodejs 库将文件从运行 Ubuntu 20.04.3 的远程服务器(服务器 1)传输到另一台远程服务器(服务器 2)。我的节点应用程序中出现有关“无法启动子系统 sftp”的错误,因此我尝试直接从服务器 1 上的命令行调用 sftp:

sftp -b /path/to/local/file -i /my/rsa_file [email protected]:/path/to/ship/file -v

并得到:

subsystem request failed on channel 0
Connection closed

我根本不是服务器管理员,但我猜 Ubuntu 默认没有配置传出 sftp。我该如何配置才能让它正常工作?我还想在本地机器 (macbook) 上运行在服务器 1 上运行的生产代码,所以我也想让它在那里工作。

迄今为止的故障排除步骤:

  • 尝试从服务器 1 到服务器 2 进行 ssh 连接,一切正常
  • 在服务器 1 上,检查 /etc/ssh/sshd_config 并发现以下行:Subsystem sftp /usr/lib/openssh/sftp-server
  • 然后检查 /usr/lib/openssh/sftp-server 并且文件存在
  • 就是这样。我迷路了。

答案1

首先检查子系统 sftp 设置的行/etc/ssh/sshd_config

# override default of no subsystems
Subsystem       sftp    /usr/libexec/openssh/sftp-server

然后检查上面提到的可执行文件是否存在。对我来说,它位于:/usr/libexec/openssh/sftp-server 如果不存在,请尝试从包管理器重新安装 sftp-server,或找到适当的可执行文件(使用whichwhereis)并将其复制到那里,或者只需将配置文件更改为正确的位置。最后确保它具有正确的权限:

-rwxr-xr-x 1 root root 63K Aug 27 12:07 /usr/libexec/openssh/sftp-server

不要忘记sudo systemctl restart ssh在 systemd 发行版或sudo service ssh restart其他地方重新启动 ssh 服务。

相关内容