簡體   English   中英

如何通過 ssh 在遠程機器上運行應用程序?

[英]How can I run an application on a remote machine by 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();

我有這個:

bash:我的應用程序:找不到命令

當嘗試通過 shell 執行此命令時,工作正常。

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

對於未來的讀者:如討論所示,原因是 JSch 連接到與普通 SSH 不同的服務器(其中一個有文件,而另一個沒有)。 我仍然在這里給出我的答案,因為它包含一些有用的(我認為)針對類似問題的調試想法。 但請記住:首先檢查您是否連接到正確的計算機


原則上,如果您使用 JSch,這就是這樣做的方法。 如果您收到錯誤消息bash: myapplication: command not found ,這意味着路徑中沒有myapplication二進制文件。 (當使用普通命令行ssh時,您將收到相同的錯誤消息。)

在您的普通 shell 中嘗試which myapplication (或type myapplication )以查看它的位置。 然后使用echo $PATH >&2作為命令,查看 exec 通道使用的路徑。 當從您的普通 shell 執行時,這可能會有所不同。 如果是這樣,請使用命令名稱中的完整路徑,或者修復您的設置。 (查看路徑是否設置在~/.bashrc~/.profile/etc/profile/etc/bash.bashrc中。只有其中一些文件將在交互式與非交互式登錄時執行 - 並且exec通道將是我認為是非交互式的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM