首页 > 解决方案 > 由于 SocketTimeoutException,如何增加 apache SSHD 的 scpClient 的 ChannelOutputStream 的等待超时?

问题描述

使用 apache SSHD scp 客户端将文件从本地复制到远程时,出现以下错误:

flush(ChannelOutputStream[ChannelExec[id=0, recipient=0]-ClientSessionImpl[uxxxxxx@Hostname.domain.com/192.163.23.68:45018]] SSH_MSG_CHANNEL_DATA) failed (SocketTimeoutException) to wait for space of len=24576: waitForCondition(Window[client/remote](ChannelExec[id=0, recipient=0]-ClientSessionImpl[uxxxxxx@Hostname.domain.com/192.163.23.68:45018])) timeout exceeded: 30000

以下是我设置 SSHServer 和 ScpClient 的方式:

如何使用 apache SSHD ScpClient 上传/下载文件

此 SCPClient 在 linux 主机中运行,并且有多个 SSHServer 在 linux 和 windows 主机中运行。

我使用这个 SCPClient 将文件复制到 linux 和 win SSHServers。我正在做的是创建大约 20 个 akka 演员,负责复制到各自的远程主机,这些主机是 win 和 linux 的组合。所以这确实在复制时给本地主机带来了一些压力。

但是,只有在复制到运行 SSHServer 的某些 WIN 服务器时,我才会收到此错误。

我确实注意到复制速度很慢,但我不确定到底是什么问题以及如何解决?

我有一个模糊的想法,它必须对这个参数做一些事情:

https://github.com/apache/mina-sshd/blob/sshd-2.5.0/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java#L43

但是我不确定在创建客户端时可以在哪里配置它?

任何指针都会有所帮助。

标签: javascpapache-sshd

解决方案


我们可以使用 PropertyResolverUtils 来更新任何配置的属性

PropertyResolverUtils.updateProperty(sshClient, ChannelOutputStream.WAIT_FOR_SPACE_TIMEOUT, 120000);

推荐阅读