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

使用jsch和sftp读取远程文件-失败4

酆耀
2023-03-14

我试图通过sftp协议使用JSch库读取文件:

final JSch jsch = new JSch();
this.session = jsch.getSession("me","myserver.com",22);
session.setPassword("redacted");

//this is just a test, so I don't care about security
Properties props = new Properties();
props.put("StrictHostKeyChecking", "no");
session.setConfig(props);

session.connect();
final ChannelSftp channel = (ChannelSftp)session.openChannel("sftp");
InputStream is = channel.get("/home/me/totallyexistingfile.txt";

问题是我在代码的最后一行遇到以下异常:

Exception in thread "main" java.io.IOException: Cannot read remote file
at com.teamead.ino.datauser.logproc.source.SSHLogSource.getStream(SSHLogSource.java:51)
at com.teamead.ino.datauser.logproc.processing.LogProc.main(LogProc.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: 4: 
at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1513)
at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1266)
at com.teamead.ino.datauser.logproc.source.SSHLogSource.getStream(SSHLogSource.java:48)
... 6 more
Caused by: java.lang.NullPointerException
at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1287)
... 8 more

我在谷歌上搜索了一下,发现这个错误可能来自sftp服务器,通常发生在上传过程中(空间不足等)。因此,我在sftp服务器上设置了日志记录(调试级别),只看到以下内容:

Oct 21 16:41:14 me sshd[365]: Accepted password for me from 192.211.54.146 port 59458 ssh2

没有别的了。我不知道我还能调查什么,因为我从双方都获得了所有相关日志:(远程机器是一台带有OpenSSH的Debian。

共有1个答案

谭吉星
2023-03-14

原来我只是错过了channel.connect()

 类似资料:
  • 问题内容: 我正在寻找一种简单的方法来获取位于远程服务器上的文件。为此,我在Windows XP上创建了本地ftp服务器,现在我想为测试Applet提供以下地址: 当然,我会收到以下错误: URI方案不是“文件” 我一直在尝试其他方法来获取文件,但它们似乎没有用。我该怎么办?(我也很想执行HTTP请求) 问题答案: 您不能使用ftp开箱即用。 如果文件位于http上,则可以执行以下操作: 如果要使

  • 我正在使用JSCH从SFTP服务器下载文件。我使用单会话,多通道下载文件从不同文件夹位于SFTP。对于这个下载过程,我有一组排定的作业。每项工作将: 每次打开一个新通道()。通道名称:SFTP 使用方法获取要下载的文件总数的大小 如果size(Vector)大于零,则使用下载所有文件 最后关闭打开的通道。 在上面的过程中,大多数时候我得到的文件,找不到或没有这样的文件异常,并没有下载一些文件。 谁

  • 我正在尝试使用JSch从SFTP服务器下载文件到我的本地机器。无论文件大小如何,它只下载16371字节的数据并结束传输。它不会引发任何异常。如果文件小于16371字节,它将成功传输,但对于任何较大的文件,传输都会导致文件损坏。

  • 我已经考虑了很长一段时间了。我正在尝试从雅虎的股票API下载数据。当您使用 API 时,它会为您提供一个文件。我一直在看opencsv,这似乎很完美,除了我想避免下载和保存文件,如果可能的话。 根据示例,OpenCSV只能从中读取。根据Oracle关于的文档,文件需要是本地的。 是否可以使用 OpenCSV 从远程文件读取而不下载?

  • 我有一个简单的Hadoop安装有点麻烦。我已经下载了hadoop 2.4.0并安装在一个CentOSLinux节点(虚拟机)上。我已经为apache站点(http://hadoop.apache.org/docs/r2.4.0/hadoop-project-dist/hadoop-common/SingleCluster.html)上描述的具有伪分布的单个节点配置了hadoop。它从日志中没有问题

  • 问题内容: 尝试将文件从Windows SFTP传输到Unix服务器时,我遇到一个特殊的问题。错误“堆栈跟踪”为- 我在其他论坛上进行了大量搜索,但无法找到根本原因。我还观察到另一件事-我尝试使用SFTP的文件名是 .xml,当我将其更改为 .XML时,SFTP是“成功的”。很奇怪,无法确定问题。我正在尝试使用JSch Java API。但是我在尝试WinSCP前端时也遇到了同样的问题。 问题答案