SFTP 失败并显示'message too long'错误



我的Java程序使用ssh/sftp将文件传输到Linux机器中(显然......),而我这样做的库是JSch(尽管这不是罪魁祸首)。

现在,其中一些 Linux 机器具有 shell 登录启动脚本,这不幸导致 ssh/sftp 连接失败,并显示以下消息

收到的消息太长1349281116

在简要阅读了它之后,它显然是一个已知的 ssh 设计问题(不是错误 - 见这里)。所有建议的解决方案都在 ssh 服务器端(即禁用在 shell 登录期间输出消息的脚本)。

我的问题 - 是否有选项可以在客户端避免此问题?

检查服务器上的 .bashrc 和.bash_profile,删除任何可以回显的内容。现在,注释掉这些行。

再试一次。您应该不会再看到此消息。

将以下内容放在文件顶部 ~/.bashrc 在远程机器上 id 的用户名上

# If not running interactively, don't do anything just return early from .bashrc
[[ $- == *i* ]] || return  

这将从 .bashrc 提前退出,而不是获取您在该目标远程计算机上执行 scp 或 sftp 时不需要的整个文件......根据该远程用户名的外壳,在 ~/.bashrc 上进行此编辑或 ~/.bash_profile 或 ~/.profile 或类似

我也遇到了这个错误,在 bash 脚本中调用 sftp get

根据TO的错误消息(与我的错误消息类似),看起来设置了sftp命令的-B选项。尽管 1349281116 字节的缓冲区大小"有点"太高了。

就我而言,我还显式设置了缓冲区大小(出于"善意"),这会导致相同的错误消息,然后是我设置的值。

删除强制值并让 sftp 以默认值 32K 运行,这为我解决了问题。

-B buffer_size
         Specify the size of the buffer that sftp uses when transferring
         files. Larger buffers require fewer round trips at the cost of 
         higher memory consumption. The default is 32768 bytes.

如果确认是同一问题,则作为客户端解决方案。

注意:我必须在远程主机上修复 .bashrc 输出,而不是在发出 scp 或 sftp 命令的主机上修复。

这是一个快速肮脏的解决方案,但它似乎有效 - 也适用于二进制文件。所有功劳都归于uvgroovy。

给定文件"some-file.txt",只需执行以下操作:

cat some-file.txt | ssh root:1.1.1.1 /bin/bash -c "cat > /root/some-new-file.txt"

不过,如果有人知道在客户端这样做的 sftp/scp 内置方法,那就太好了。

最新更新