sftp失败,消息太长'错误

时间:2015-02-01 13:28:03

标签: ssh sftp jsch ssh2-sftp

我的java程序使用ssh / sftp将文件传输到linux机器(很明显......),而我这样做的库是JSch(尽管不应该责备)。

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

  

收到的消息太长了1349281116

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

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

5 个答案:

答案 0 :(得分:2)

检查服务器上的.bashrc和.bash_profile,删除任何可以回显的内容。现在,请注释出来。

再试一次。你不应该再看到这个消息了。

答案 1 :(得分:2)

我也得到了这个错误,并且在一个bash脚本中调用了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.

如果它确认是同一个问题,那么 可以作为客户端解决方案。

答案 2 :(得分:1)

将远程计算机上ID为ID的用户名放入文件〜/ .bashrc的顶部

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

这是一个快速的解决方案,但似乎有效 - 也适用于二进制文件。所有积分都转到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内置的方式在客户端使用 ,那么它会很棒。