【踩坑】sftp无法连接:Received message too long 1763729773 Ensure the remote shell produces no output for ...

文章目录

  • 现象
  • 原因
  • 解决方法


参考 Received message too long Ensure the remote shell produces no output for non-interactive sessions.


现象

ssh连接正常,但sftp却无法连接。(sftp是ssh内含的协议)

使用命令行sftp [email protected]连接时,返回了这个错误:Received message too long 1763729773 Ensure the remote shell produces no output for non-interactive sessions. (收到的信息太长 1763729773 确保远程shell对非交互式会话不产生输出)

坑点在于使用Tabby(一个终端模拟器)连接sftp并不会报错,而是一直没反应。只有使用命令行连接时,才得知了这个错误,但平时很少人会尝试用命令行连接。

原因

原因是:~/.bashrc~/.bashrcShell启动文件中存在echoprintf输出语句,导致sftp不能建立连接。
(这两是bash的启动文件,如果你用的是zsh等其他Shell,需要找与你用的Shell对应的启动文件。)
(关于shell启动文件详见:【Linux基础】理解并善用Shell – Shell精讲)

————
根据这篇文章 Received message too long Ensure the remote shell produces no output for non-interactive sessions.
所说:经过实验:

  • 如果在 /etc/bashrc~/.bashrc 中有echo等输出语句, 则无法远程用scp, sftp 传文件
  • 如果在 /etc/profile~/.bash_profile 中有echo等输出语句, 不影响用scp, sftp 传文件

这里有一些小问题,/etc/profile~/.bash_profile是交互式登录式shell加载的,/etc/bashrc~/.bashrc是交互式非登录式Shell加载的。而命令行连接sftp报的错是... produces no output for non-interactive sessions,说的是非交互式Shell。这里就有点矛盾,按说非交互式Shell不会加载Shell的启动文件,而sftp明显需要登录。
说这些仅做了解即可,具体就不深究了,这都是小问题。

解决方法

方法一: 移除Shell启动文件中的输出语句。
移除 ~/.bashrc~/.bashrc等启动文件中的输出语句。
其实这些文件本身是没有输出语句的,所以基本上是使用者自己写的,具体写在哪些文件里应该会有印象。并且这些语句会在建立ssh连接的时候打印出来,真的不好找的话,可以在所有启动文件中搜索打印的内容,就能找到啦。

方法二: 修改sftp服务为内部的sftp。
编辑/etc/ssh/sshd_config

vim /etc/ssh/sshd_config

找到Subsystem

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

注释掉,并新增一行 Subsystem sftp internal-sftp , 表示使用内部sftp
(修改后, 即便Shell启动文件中有输出语句,也不再影响sftp的使用)

然后重新连接ssh,或重启sshd服务即可

你可能感兴趣的:(Linux,linux,bash)