在java中通过SSH2进行远程主机文件操作

时间:2011-03-30 10:00:55

标签: java ssh file-listing

我现在有一个简单的任务:连接到远程服务器并获取文件列表及其信息(特别是创建日期)。

尝试了JSch,但这就像20年前编写unix应用程序一样。想切换到sshj所以如果可能的话,请提供一些关于如何实现至少文件列表及其信息的代码(理想情况下,我想获得一个File对象数组)。

那么我该如何实现目标呢?

提前致谢。

注意:AFAIU只能在服务器端使用 ls 并解析它,不是吗?

3 个答案:

答案 0 :(得分:3)

他们的示例与其源代码分发捆绑在一起。你看他们了吗?我在2分钟内找到了这个:sshj: how to execute remote command example

修改

好的,你可以执行例子(基于我链接的例子):

final Command cmd = session.exec("ls -l /some/interesting/dir");
String lsOutput = cmd.getOutputAsString();

// parse lsOutput and extract required information
...

如果你想在ssh上做这件事没有简单的方法,因为它没有文件概念等。它只是一个远程shell。也许sftp可以在这里提供更好的界面,但我不是sftp的专家。

答案 1 :(得分:3)

这是sftp(JSCH)的代码

ChannelSftp sftp = (ChannelSftp)session.openChannel("sftp");
sftp.connect();
sftp.cd(DIRECTORY);
Vector v = null;
v = sftp.ls("*.txt"); //txt files only

与密钥文件一起使用:
JSch jsch = new JSch();
jsch.setKnownHosts(myKonfig.getKnownHostsFile());
String privKeyFile = myKonfig.getPrivateKeyFile();
jsch.addIdentity(privKeyFile);

答案 2 :(得分:1)

  

糟糕,只是看到它没有返回创建时间,只是修改时间。

如果您只是想从远程系统获取文件信息,我建议您使用sshj中提供的SFTPClient类。

使用:

SFTPClient.ls(directory)

命令查找所有远程文件,然后使用:

SFTPClient.stat(file)

从远程文件中获取所有信息,包括修改日期。