【问题标题】:sftp fails with 'message too long' errorsftp 因“消息太长”错误而失败
【发布时间】:2020-08-19 01:22:15
【问题描述】:

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

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

收到的消息太长 1349281116

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

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

【问题讨论】:

  • 有趣的分析:1349281116(十进制)= 506C655C(十六进制)= Ple\(文本ASCII) 当你直接用终端连接$ ssh ...你得到一个包含“Ple\”的响应吗?

标签: ssh sftp jsch ssh2-sftp


【解决方案1】:

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

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

【讨论】:

  • 谢谢,但我只在客户端寻找解决方案,即不更改 ssh-server 端的任何内容。
  • 我可能是错的,但我认为这不能从客户端完成,因为这是服务器端问题。但如果您或其他人发现其他情况,我很想知道。
  • 仅供参考 只有 .bashrc 应该保持沉默, .bash_profile 可以包含 echo 命令而不会导致不需要的行为。这是因为在启动子 shell 时只调用了 .bashrc。
  • 就我而言,这是罪魁祸首,最近在服务器端向 .bashrc 添加了一些内容,甚至提示输入密码。删除它并工作。
【解决方案2】:

在 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.

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

【讨论】:

    【解决方案3】:

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

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

    这只会从 .bashrc 中提前退出,而不是在目标远程机器上执行 scp 或 sftp 时获取您不想要的整个文件...取决于该远程用户名的 shell,在 ~/ 上进行此编辑.bashrc 或 ~/.bash_profile 或 ~/.profile 或类似

    【讨论】:

    • 这是迄今为止最干净的解决方案。在非交互式 shell(例如 scp)的情况下,它会帮助您保留宝贵的 .bashrc 文件。完美的。谢谢。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      这是一个快速的-n'-dirty 解决方案,但它似乎工作 - 也适用于二进制文件。所有学分都归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 方法,那就太好了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 2016-04-28
        • 2012-08-16
        • 2018-05-31
        • 1970-01-01
        • 1970-01-01
        • 2015-02-17
        相关资源
        最近更新 更多