如何用Scala的akka.stream.alpakka.ftp列出SFTP文件?遇传输错误
SFTP列出文件时出现Broken transport; encountered EOF错误
代码片段
val ftpApi: FtpApi[SSHClient, SftpSettings] val futureResult = ftpApi.ls(basePath = path, connectionSettings = settings)
错误日志
11:53:36.875 [sshj-Reader-/200.13.144.60:181] DEBUG net.schmizz.sshj.transport.TransportImpl - Setting active service to null-service 11:53:36.875 [sshj-Reader-/200.13.144.60:181] DEBUG net.schmizz.concurrent.Promise - Setting <<transport close>> to `SOME` 11:53:36.875 [sshj-Reader-/200.13.144.60:181] DEBUG net.schmizz.sshj.transport.Reader - Stopping [ERROR] [02/27/2023 11:53:36.876] [default-akka.actor.default-blocking-io-dispatcher-21] [akka://default/system/Materializers/StreamSupervisor-0/flow-0-2-sFtpBrowserSource] Error during postStop in [akka.stream.alpakka.ftp.impl.FtpBrowserGraphStage$$anon$1-sFtpBrowserSource]: Broken transport; encountered EOF net.schmizz.sshj.connection.ConnectionException: Broken transport; encountered EOF at net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:32) at net.schmizz.sshj.connection.ConnectionException$1.chain(ConnectionException.java:26) at net.schmizz.concurrent.Promise.deliverError(Promise.java:95) at net.schmizz.concurrent.Event.deliverError(Event.java:74) at net.schmizz.concurrent.ErrorDeliveryUtil.alertEvents(ErrorDeliveryUtil.java:34) at net.schmizz.sshj.connection.channel.AbstractChannel.notifyError(AbstractChannel.java:239) at net.schmizz.sshj.connection.channel.direct.SessionChannel.notifyError(SessionChannel.java:229) at net.schmizz.sshj.common.ErrorNotifiable$Util.alertAll(ErrorNotifiable.java:35) at net.schmizz.sshj.connection.ConnectionImpl.notifyError(ConnectionImpl.java:261) at net.schmizz.sshj.transport.TransportImpl.die(TransportImpl.java:588) at net.schmizz.sshj.transport.Reader.run(Reader.java:66) Caused by: net.schmizz.sshj.transport.TransportException: Broken transport; encountered EOF at net.schmizz.sshj.transport.Reader.run(Reader.java:58)
排查与解决方向
- 验证连接配置准确性:检查
path是否为服务器上存在的有效路径,SftpSettings中的主机地址、端口、认证信息(用户名/密码或密钥)是否正确,确认本地到服务器200.13.144.60:181端口的网络连通性。 - 检查服务器端状态:确认SFTP服务正常运行,当前用户对目标路径有读取权限,服务器未设置过短的连接超时时间,没有主动中断连接的规则。
- 核对依赖版本兼容性:确保Alpakka FTP库与依赖的SSHJ版本匹配,版本冲突可能引发传输层异常。
- 添加超时与重试机制:在
SftpSettings中配置合理的连接超时、操作超时参数,为ls操作添加重试逻辑,应对临时连接中断问题。 - 开启详细日志:升级SSHJ日志级别至TRACE,查看连接建立、认证、目录访问的完整流程,定位EOF出现的具体环节。
内容的提问来源于stack exchange,提问作者rEVOLution
相关产品推荐
相关产品推荐

