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

通过ssh在远程系统上执行java代码,java,ssh,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.

我想在本地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);
...
ssh.connect();
MyExecuteClass execClass = new MyExecuteClass();
ssh.exec(execClass.runLongJob(a, b, c));
MyReturn return = ssh.getReturnValue();
(来自)

ssxcute
,可与

ConnBean cb = new ConnBean("ip ", "username","password");
ssh = SSHExec.getInstance(cb);      
ssh.connect();
CustomTask sampleTask = new ExecCommand("echo 123");
ssh.exec(sampleTask);
(来自)

但我想做的是

JSch jsch=new JSch();
Session session=jsch.getSession(user, host, 22);
session.setPassword(passwd);
Channel channel=session.openChannel("shell");
channel.setInputStream(System.in);
...
ssh.connect();
MyExecuteClass execClass = new MyExecuteClass();
ssh.exec(execClass.runLongJob(a, b, c));
MyReturn return = ssh.getReturnValue();
这可能吗?必须将对象
a、b、c
以及所有全局变量、其他类、导入等传输到远程系统,。。。方法的返回值必须以某种方式返回。。。如果在
runLongjob
方法中修改了其他对象,则这些更改也必须发送回本地PC


有解决方案吗?

您想要做的基本上不仅需要在远程系统上序列化、传输和反序列化对象,还需要在主机上存在并启动Java VM,并且在其类路径中包含传输实例的类。我怀疑你能否找到一个现成的解决方案。不过,您可以使用类似RMI的东西与远程主机上运行的JVM进行通信。

我不知道有哪种框架可以专门实现您所描述的功能。想到的最贴切的事情是使用web服务。它们允许您定义在远程服务器上运行的响应请求的服务。请求和响应可以包含复杂的数据结构。有成熟的库可以用java开发web服务

请看这些: