我正在创建一个Java程序,它在ssh上做了很多事情。
在我的程序中,我需要能够在远程主机上运行诸如"listFiles()"之类的方法。我还需要能够从Apache Commons io运行几个命令(我正在使用"FileUtils"类)。我见过像JSch这样的程序,但是在文件操作和传输方面,它们都没有足够的灵活性。
任何人都可以建议解决我问题的替代程序或方法吗?
相反,JSch 确实支持文件传输: http://www.jcraft.com/jsch/examples/ScpTo.java.html
至于列出远程主机上的文件,你不能只使用Apache Commons FileUtils在那里运行java命令。您所要做的就是在远程操作系统上远程执行命令 - 相当于通过命令行 ssh 执行此操作:
ssh remotehost ls /path/to/remote/dir
对于您选择的任何ssh库来说,这几乎都是正确的,而不仅仅是JSch。
因此,就JSch而言,这将是(假设您已经设置并连接了Jsch ssh会话):
ChannelExec channel= (ChannelExec) session.openChannel("exec");
channel.setCommand("ls /path/to/remote/dir");
InputStream in=channel.getInputStream();
channel.connect()
// read your ls-output from the input stream here
channel.disconnect()