2011-06-29 142 views
1

如何通过ssh在远程计算机上运行应用程序?如何通过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(); 

,我有这样的:

庆典:为MyApplication:找不到命令

当试图通过壳执行这个命令,作品精细。

不一定需要是JSCH,可以是任何东西。

+0

这是否工作,如果你使用命令行ssh? 'ssh [email protected] myapplication someFileAsParameter' –

+0

此外,它是否可以使用'ps'? –

+0

当通过JSch登录时,您确定该命令在PATH中吗?我有一个模糊的感觉,这里可能有登录与非登录shell问题。 – qid

回答

4

对于将来的读者:如讨论所示,原因是JSch连接到不同于普通SSH的服务器(其中一个具有该文件,而另一个不具有该文件)。我仍然让我的答案在这里,因为它包含了一些有用的(我认为)类似问题的调试思路。但请记住:首先检查您是否连接到正确的计算机


原则上,如果您使用JSch,则可以这样做。如果您收到错误消息bash: myapplication: command not found,则表示路径中没有myapplication二进制文件。 (当使用普通命令行ssh时,您将得到相同的错误消息。)

尝试在普通shell中尝试which myapplication(或type myapplication),以查看它的位置。然后使用echo $PATH >&2作为命令,查看您的可执行通道使用的路径。这可能是不同的,然后从你的普通shell执行。如果是这样,请使用命令名称中的完整路径,或者修复您的设置。 (看羯羊路径在~/.bashrc~/.profile/etc/profile/etc/bash.bashrc只设置一些文件将得到一个交互式与非交互式登录时执行 - 而exec通道将是非交互式的,我想。)

+0

以这种方式工作正常:'ssh [email protected] myapplication someFileAsParameter'。我的应用程序位于/ usr/local/bin,我的路径是/ usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin – coffee

+0

@Paulo所以,我的路径是正确的,对吧?为什么它在我使用命令行时起作用?谢谢。 – coffee

+0

我在这里没有真正的想法......你是否使用shell或JSch中的'echo $ PATH'? –

相关问题