当前位置: 首页 > 知识库问答 >
问题:

jsch 0.1.55抛出java。io。IO异常:IO流读取结束

楚知
2023-03-14

我们每天都使用jsch-0.1.53.jar通过SFTP获取文件,但是运行了几年后,它现在停止工作了。我想服务器管理员可能已经升级了服务器软件。

相关代码(JAVA 1.7)不包含任何意外:

            Hashtable<String, String> config = new Hashtable<String, String>();
            config.put("StrictHostKeyChecking", "no");
            sftpSession = jsch.getSession(user, host, port);
            sftpSession.setConfig(config);
            sftpSession.setPassword(password);
            sftpSession.connect();
            sftpChannel = (ChannelSftp) sftpSession.openChannel("sftp");
            sftpChannel.connect();

最后一行抛出“java.io.IOException:io流读取结束”,所以我想服务器会关闭连接。

我升级到了jsch 0.1.55(尽管下面的日志声称它是0.1.54),但这并没有改变任何事情。

jsch的日志输出如下所示:

*** Connecting to XXXXXXX.XXX.XX port 22
*** Connection established
*** Remote version string: SSH-2.0-7.9.0.0_openssh Globalscape
*** Local version string: SSH-2.0-JSCH-0.1.54
*** CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
*** aes256-ctr is not available.
*** aes192-ctr is not available.
*** aes256-cbc is not available.
*** aes192-cbc is not available.
*** CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
*** diffie-hellman-group14-sha1 is not available.
*** CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
*** SSH_MSG_KEXINIT sent
*** SSH_MSG_KEXINIT received
*** kex: server: diffie-hellman-group16-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
*** kex: server: ssh-rsa
*** kex: server: 3des-cbc,aes256-cbc,aes128-cbc,aes256-ctr,aes128-ctr
*** kex: server: 3des-cbc,aes256-cbc,aes128-cbc,aes256-ctr,aes128-ctr
*** kex: server: hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96
*** kex: server: hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96
*** kex: server: zlib,none
*** kex: server: zlib,none
*** kex: server: 
*** kex: server: 
*** kex: client: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
*** kex: client: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
*** kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc
*** kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc
*** kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96
*** kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96
*** kex: client: none
*** kex: client: none
*** kex: client: 
*** kex: client: 
*** kex: server->client aes128-ctr hmac-md5 none
*** kex: client->server aes128-ctr hmac-md5 none
*** SSH_MSG_KEX_DH_GEX_REQUEST(1024<1024<1024) sent
*** expecting SSH_MSG_KEX_DH_GEX_GROUP
*** Disconnecting from XXXXXXX.XXX.XX port 22

我试过配置。setConfig(“kex”,“diffie-hellman-group1-sha1”);这在这里的一个类似问题中已经提出,但对我来说,这既不适用于0.1.53,也不适用于0.1.55。

jcraft提供的用于连接到openSSH的jsch示例也会因相同的异常而失败。

我可以使用WinSCP使用相同的用户/密码连接到服务器。

有人能够根据日志提出解决方案(可能是正确的属性设置)吗?

非常感谢任何帮助。

共有1个答案

阎英朗
2023-03-14

由于坚持使用jsch无法解决这个问题,我重写了通信层,并用sshj替换了jsch,这在我们的例子中非常容易。对于任何遇到jsch问题或类似问题的人来说,这可能不是一个可行的解决方案,但对我们来说,它做到了。

 类似资料:
  • 最近我在读一张MifareClassic 1K卡。在阅读了事实之后,只有某些带有恩智浦芯片的手机才能读取这些标签,而获得这些标签中的一个,我面临着一个新的问题 我试图阅读的卡片会抛出标题中提到的错误,但只有在运行时没有逐行检查代码。这里有一些细节:起初,我从Xamarin那里取了NFCSample,并做了一些改变: 因此,如果我单步执行代码ReadBlock/ReadBlockAsync,它的工作

  • 问题内容: 我下载了新的JSch 0.1.53库, 并且JSch(sftp)下载任务不再起作用。此版本因函数抛出错误而失败。 我的旧jsch.jar(2011-10-06)在同一主机上运行正常,也许我缺少新的配置道具? 这是一个广泛的JSch日志记录,指示发生了什么。 我还有一个非常旧的Jsch.jar(2011-10-06),其中下载任务正常运行,这是一个日志。我要升级的原因是文件传输速度非常慢

  • 问题内容: 这是我目前拥有的代码: 一切都会按预期进行(调用writeToFile方法时将文件写入)。但是,当第二次调用writeToFile方法时,出现以下错误: 该文件仍按预期第二次写入,但是它将在第二次以及以后对writeToFile()的调用中引发此错误。我想知道是什么导致此错误发生。 问题答案: 写完后就在打电话。流关闭后,将无法再次写入。通常,实现此目标的方法是将结束状态移至write

  • 1.1 概述 数据流是操作基本数据类型的流,分为数据输入流,数据输出流。 1.2 数据输入流 1、DataOutputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。 2、构造方法 DataOutputStream(OutputStream out) :创建一个新的数据输出流,将数据写入指定基础输出流。 1.3 数据

  • 我需要应用程序将错误写入位置。有没有我可以用Java异常处理做这件事?我已经在抛接IOerrors了,所以我不知道问题出在哪里……? 我正在从标准输入读取数据,并将其压缩并写入标准输出。 写入/dev/full不是引发异常...有没有关于如何引发异常的想法?

  • 本文向大家介绍java的IO流详细解读,包括了java的IO流详细解读的使用技巧和注意事项,需要的朋友参考一下 流,就是一系列的数据。 当不同介质之间有数据交互的时候,JAVA就使用流来实现。数据源可以是文件,还可以是数据库、网络甚至其他的程序。 比如读取文件的数据到程序中,站在程序的角度来看,就叫做输入流。 字节流(以字节的形式读取和写入数据) InputStream字节输入流同时也是抽象类,只