sftp因“消息太长”错误而失败

问题描述 投票:3回答:5

我的java程序使用ssh / sftp将文件传输到linux机器(显然......),而我的库也是JSch(尽管不应该责怪)。

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

收到的消息太长了1349281116

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

我的问题 - 有没有选择在客户端避免这个问题?

ssh sftp jsch ssh2-sftp
5个回答
2
投票

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

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


2
投票

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

根据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.

如果它符合相同的问题,那将适合作为客户端解决方案。


1
投票

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

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

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


0
投票

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


-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内置方式,它会很棒。

© www.soinside.com 2019 - 2024. All rights reserved.