6

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

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

收到的消息太长 1349281116

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

我的问题 - 是否可以选择在客户端避免这个问题?

4

5 回答 5

3

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

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

于 2015-02-01T16:22:24.053 回答
2

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

根据TO的错误信息,这与我的类似,看起来-Bsftp命令的选项被设置了。尽管 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.

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

于 2017-01-26T15:54:15.003 回答
2

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

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

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

于 2019-03-11T14:22:24.693 回答
0

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

于 2017-10-23T01:14:06.333 回答
-2

这是一个快速-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 内置方式,那就太好了。

于 2015-02-02T05:53:43.657 回答