1

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: コマンドが見つかりません

このコマンドをシェルで実行してみると、うまくいきます。

必ずしも JSCH である必要はなく、何でもかまいません。

4

1 に答える 1

4

将来の読者のために: 議論で示されているように、その理由は、JSch が通常の SSH とは異なるサーバーに接続していたためです (そして、これらの 1 つにはファイルがあり、もう 1 つにはありませんでした)。同様の問題に対するいくつかの有用な(私が思うに)デバッグのアイデアが含まれているため、ここで私の回答を許可します。ただし、覚えておいてください:まず、正しいコンピュータに接続していることを確認してください


原則として、JSch を使用する場合は、この方法で行います。エラー メッセージ が表示された場合は、パスにバイナリbash: myapplication: command not foundがなかったことを意味します。myapplication(プレーン コマンド ラインを使用すると、同じエラー メッセージが表示されますssh。)

通常のシェルでwhich myapplication(または) を試して、どこにあるかを確認してください。type myapplication次にecho $PATH >&2、コマンドとして使用して、実行チャネルで使用されるパスを確認します。これは、通常のシェルから実行した場合とは異なる可能性があります。その場合は、コマンド名にフル パスを使用するか、セットアップを修正してください。(パスが~/.bashrc~/.profile/etc/profileまたはに設定されているかどうかを確認/etc/bash.bashrcしてください。これらのファイルの一部のみが、対話型ログインと非対話型ログインで実行されexecます。チャネルは非対話型になると思います。)

于 2011-06-29T21:36:59.037 に答える