2011-06-29 172 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'? –

相關問題