4

Javaプログラムの一部としてこれを行う簡単な方法があるかどうか疑問に思っていました.

別のマシンに ssh して、そのマシンでコマンドを実行できるようにしたいと考えています。

簡単な例は次のとおりです: runtime.exec("say hello world"); (Mac では) テキスト読み上げエンジンが hello world を話します。

Java でこのメソッドを別のマシンで実行する方法はありますか?

また、上記が可能であると仮定すると、同時に複数のマシンに ssh する方法はありますか?

ありがとう

4

4 に答える 4

5

これを行うライブラリはたくさんあります。公式の OpenSSH Web サイトにも記載されているGanymed SSH-2をお勧めします。同じサイトで、Java に使用できる他のライブラリーも見つけることができます。

ls -rこれは、 Ganymed SSH-2 を使用して、SSH 経由で実行されるコマンドの例です。

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;

[...]

public static ArrayList<String> lsViaSSH(String hostname, String username, String password, String dir) {
    ArrayList<String> ls = new ArrayList<String>();

    try
    {
        Connection conn = new Connection(hostname);

        conn.connect();

        boolean isAuthenticated = conn.authenticateWithPassword(username, password);

        if (isAuthenticated == false) {
            return null;
        }

        Session sess = conn.openSession();

        sess.execCommand("ls -r " + dir);

        InputStream stdout = new StreamGobbler(sess.getStdout());

        BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

        while (true)
        {
            String line = br.readLine();
            if (line == null)
                break;
            ls.add(line);
        }

        sess.close();
        conn.close();
    }
    catch (IOException e)
    {
        return null;
    }

    if(StringUtils.isEmpty(ls.get(0)))
        return null;

    return ls;
}

SSH 経由でコマンドを実行するために必要な機能はこれだけではありませんが、これが出発点として役立つことを願っています。

于 2013-03-14T17:18:06.767 に答える
2

JSchを見てください

まったく同時に実行する限り?リモートマシンのリストを処理するために複数のスレッドを生成するつもりでない限り、そうではありません。

于 2013-03-14T17:17:04.017 に答える
1

sshコマンドが利用可能で、パスワードの入力を避けるためにsshキーが設定されているシステムを使用している場合、最も簡単なのは

runtime.exec("ssh remote_comp 'say hello world'");
于 2013-03-14T17:22:28.017 に答える
0

Apache MINA SSHDをご覧になることをお勧めします。Javaを使用してクライアントとサーバーの両方を作成するために使用できます。

于 2013-03-14T17:16:42.607 に答える