2011-06-29 8 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(); 

と私はこれがあります。

のbash:します。myapplication:シェルでこのコマンドを実行しようとすると

を見つけていないコマンド、作品を良い。

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

+0

がいこれはあなたの場合は動作します - (、私は考えてexecチャンネルは非対話型になります。のみ、これらのファイルの一部は、非対話型ログイン双方向対上で実行されますパスは~/.bashrc~/.profile/etc/profileまたは/etc/bash.bashrcに設定されている天気を確認してください。)コマンドラインsshを使用しますか? 'ssh [email protected] myapplication someFileAsParameter' –

+0

また、' ps'でも動作しましたか? –

+0

JSch経由でログインしたときにコマンドがあなたのPATHに入っていますか?私はここにログイン対非シェルの問題があるかもしれないという曖昧な感情を持っています。 – qid

答えて

4

今後の読者:JSchは通常のSSHとは別のサーバーに接続されています(これらのファイルの1つにはファイルがあり、もう1つはありませんでした)。同様の問題のためのアイデアをデバッグするのに役立つ(私が思う)いくつかの有用なものが含まれているので、私はまだここで答えを出しています。しかし、覚えておいてください:まず、正しいコンピュータに接続していることを確認します。


JSchを使用する場合、原則として、これを行う方法です。エラーメッセージbash: myapplication: command not foundが表示された場合は、パスにバイナリがmyapplicationでないことを意味します。

普通のシェルでwhich myapplication(またはtype myapplication)を試して、その場所を確認してください。次に、echo $PATH >&2をコマンドとして使用して、execチャネルで使用されているパスを確認します。これは、通常のシェルから実行されたときとは異なることがあります。その場合は、コマンド名に完全パスを使用するか、セットアップを修正してください。

+0

このようにしたときにうまく動作します: 'ssh [email protected] myapplication someFileAsParameter'。私のアプリケーションは/ usr/local/binにあり、私のPATHは/ usr/local/sbinです:/ usr/local/bin:/ usr/sbin:/ usr/bin – coffee

+0

@Pauloなぜ私はコマンドラインを使用すると動作するのですか?ありがとうございました。 – coffee

+0

私は実際にはここで考えていません...シェルかJSchから 'echo $ PATH'を使いましたか? –

関連する問題