Java 如何通过ssh在远程计算机上运行应用程序?
如何通过ssh在远程计算机上运行应用程序 我尝试使用JSCH,方法如下:Java 如何通过ssh在远程计算机上运行应用程序?,java,linux,ssh,remote-access,jsch,Java,Linux,Ssh,Remote Access,Jsch,如何通过ssh在远程计算机上运行应用程序 我尝试使用JSCH,方法如下: Properties props = new Properties(); props.put("StrictHostKeyChecking", "no"); String host = "111.111.11.111"; String user = "myuser"; String pwd = "mypass"; // int port = 22; JSch js
Properties props = new Properties();
props.put("StrictHostKeyChecking", "no");
String host = "111.111.11.111";
String user = "myuser";
String pwd = "mypass";
// int port = 22;
JSch jsch = new JSch();
Session session = jsch.getSession(user, host);
session.setConfig(props);
session.setPassword(pwd);
session.connect();
System.out.println(session.getServerVersion());
System.out.println("Conected!");
// String command = "ps -ef;date;hostname";
String command = "myapplication someFileAsParameter";
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
// channel.setInputStream(System.in);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
我有这个:
bash:myapplication:未找到命令
尝试通过shell执行此命令时,效果良好
不一定需要是JSCH,可以是任何东西。对于未来的读者:如讨论所示,原因是JSCH连接到不同于普通SSH的服务器,其中一个服务器有文件,而另一个没有。我仍然在这里给出我的答案,因为它包含了一些我认为对类似问题有用的调试想法。但请记住:首先检查您是否连接到了正确的计算机
原则上,如果您使用JSch,这就是实现它的方法。如果收到错误消息bash:myapplication:command not found,这意味着路径中没有myapplication二进制文件。当使用普通命令行ssh时,您将收到相同的错误消息
尝试在普通shell中使用哪个myapplication或键入myapplication,以查看它的位置。然后使用echo$PATH>&2作为命令,查看exec通道使用的路径。这可能与从普通shell执行时不同。如果是,请在命令名中使用完整路径,或修复您的设置。查看路径是否在~/.bashrc、~/.profile、/etc/profile或/etc/bash.bashrc中设置。只有这些文件中的一部分会在交互登录和非交互登录上执行,我认为exec通道将是非交互的。对于未来的读者:正如讨论所示,原因是JSch连接到了与普通SSH不同的服务器,其中一个有该文件,而另一个没有。我仍然在这里给出我的答案,因为它包含了一些我认为对类似问题有用的调试想法。但请记住:首先检查您是否连接到了正确的计算机
原则上,如果您使用JSch,这就是实现它的方法。如果收到错误消息bash:myapplication:command not found,这意味着路径中没有myapplication二进制文件。当使用普通命令行ssh时,您将收到相同的错误消息
尝试在普通shell中使用哪个myapplication或键入myapplication,以查看它的位置。然后使用echo$PATH>&2作为命令,查看exec通道使用的路径。这可能与从普通shell执行时不同。如果是,请在命令名中使用完整路径,或修复您的设置。查看路径是否在~/.bashrc、~/.profile、/etc/profile或/etc/bash.bashrc中设置。只有这些文件中的一部分会在交互式登录和非交互式登录时执行,我认为exec通道是非交互式的。如果使用命令行ssh,这是否有效?sshmyuser@111.111.11.111myapplication SomeFileAsParametera您确定通过JSch登录时该命令位于您的路径中吗?我有一种模糊的感觉,这里可能有登录和非登录shell的问题。@Paulo有!但是我需要插入密码。使用ps@qid我正在这样做/usr/local/myapp/mySH/myfolder/myFileAsParameter@coffee:ssh测试只是为了定位问题,而不是孤岛方案。如果使用命令行ssh,这是否有效?sshmyuser@111.111.11.111myapplication SomeFileAsParametera您确定通过JSch登录时该命令位于您的路径中吗?我有一种模糊的感觉,这里可能有登录和非登录shell的问题。@Paulo有!但是我需要插入密码。使用ps@qid我正在这样做/usr/local/myapp/mySH/myfolder/myFileAsParameter@coffee:ssh测试只是为了定位问题,而不是孤岛方案。当我这样做时效果很好:sshmyuser@111.111.11.111myapplication someFileAsParameter。我的应用程序在/usr/local/bin中,路径是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin@Paulo所以,我的道路是正确的,对吗?为什么我使用命令行时它会工作?谢谢,我真的不知道。。。您使用的echo$PATH是来自shell还是来自JSch?另外,/usr/local/bin/myapplication someFileAsParameter在JSch中工作吗?我很惭愧。不同的机器。谢谢当我这样做时效果很好:sshmyuser@111.111.11.111myapplication someFileAsParameter。我的应用程序在/usr/local/bin中,路径是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin@Paulo所以,我的道路是正确的,对吗?为什么我使用命令行时它会工作?谢谢,我真的不知道。。。您使用的echo$PATH是来自shell还是来自JSch?另外,/usr/local/bin/myapplication someFileAsParameter在JSch中工作吗?我很惭愧。不同的机器。谢谢