通过ssh在远程系统上执行java代码

时间:2014-06-13 09:13:20

标签: java ssh

我想在我的本地PC上运行一个java程序,它通过ssh连接到远程PC并执行一些方法(java代码,而不是bash脚本!)。我找到了例如JSch,它使用类似

的ssh连接和远程执行代码
JSch jsch=new JSch();
Session session=jsch.getSession(user, host, 22);
session.setPassword(passwd);
Channel channel=session.openChannel("shell");
channel.setInputStream(System.in);

(来自http://www.jcraft.com/jsch/examples/Shell.java.html

ssxcute可以与

一起使用
ConnBean cb = new ConnBean("ip ", "username","password");
ssh = SSHExec.getInstance(cb);      
ssh.connect();
CustomTask sampleTask = new ExecCommand("echo 123");
ssh.exec(sampleTask);

(来自https://code.google.com/p/sshxcute/

但我想做的就像是

...
ssh.connect();
MyExecuteClass execClass = new MyExecuteClass();
ssh.exec(execClass.runLongJob(a, b, c));
MyReturn return = ssh.getReturnValue();

这可能吗?对象a,b,c必须传输到远程系统,以及所有全局变量,其他类,导入......并且必须以某种方式返回方法的返回值...如果其他对象是在runLongjob方法中修改后,这些更改也必须发送回本地PC。

有解决方法吗?

2 个答案:

答案 0 :(得分:0)

您想要做的事情基本上不仅需要在远程系统上对您的对象进行序列化,传输和反序列化,还要在主机上存在并启动Java VM,并在其类中为您传输的实例提供类路径。我怀疑你会找到一个开箱即用的解决方案。但是,您可以使用类似RMI的东西与远程主机上正在运行的JVM进行通信。

答案 1 :(得分:0)

我不知道任何框架要专门针对您描述的内容。最让人想到的是使用Web服务。它们允许您定义在响应请求的远程服务器上运行的服务。请求和响应可以包含复杂的数据结构。有用于在Java中开发Web服务的成熟库。

见这些: