Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过ssh在远程计算机上运行应用程序?_Java_Linux_Ssh_Remote Access_Jsch - Fatal编程技术网

Java 如何通过ssh在远程计算机上运行应用程序?

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

如何通过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 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中工作吗?我很惭愧。不同的机器。谢谢