web-dev-qa-db-ja.com

Javaを使用してリモートシステムでSSHコマンドを実行するにはどうすればよいですか?

私はこの種のJavaアプリケーションを初めて使用し、SSHを使用してリモートサーバーに接続し、コマンドを実行し、Javaプログラミング言語として。

27
sweety

Runtime.exec()Javadocをご覧ください

Process p = Runtime.getRuntime().exec("ssh myhost");
PrintStream out = new PrintStream(p.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));

out.println("ls -l /home/me");
while (in.ready()) {
  String s = in.readLine();
  System.out.println(s);
}
out.println("exit");

p.waitFor();
16
bobah

JSchは、純粋なJavaリモートマシン上でコマンドを実行するのに役立つSSH2の実装です。これは here にあり、いくつかの例があります here

exec.Javaを使用できます。

12

以下は、JavaでSShを実行する最も簡単な方法です。以下のリンクにあるファイルのいずれかをダウンロードして抽出し、抽出したファイルからjarファイルを追加して、プロジェクトのビルドパスに追加します http://www.ganymed.ethz.ch/ssh2/ =および以下の方法を使用します

public void SSHClient(String serverIp,String command, String usernameString,String password) throws IOException{
        System.out.println("inside the ssh function");
        try
        {
            Connection conn = new Connection(serverIp);
            conn.connect();
            boolean isAuthenticated = conn.authenticateWithPassword(usernameString, password);
            if (isAuthenticated == false)
                throw new IOException("Authentication failed.");        
            ch.ethz.ssh2.Session sess = conn.openSession();
            sess.execCommand(command);  
            InputStream stdout = new StreamGobbler(sess.getStdout());
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
            System.out.println("the output of the command is");
            while (true)
            {
                String line = br.readLine();
                if (line == null)
                    break;
                System.out.println(line);
            }
            System.out.println("ExitCode: " + sess.getExitStatus());
            sess.close();
            conn.close();
        }
        catch (IOException e)
        {
            e.printStackTrace(System.err);

        }
    }
5
Pavan Kumar

あなたはこれを見ることができますJavaベースのフレームワーク、SSH経由を含む: https://github.com/jkovacic/remote-exec It JSch(この実装ではECDSA認証もサポートされます)またはGanymed(これら2つのライブラリのうちの1つで十分です)の2つのオープンソースSSHライブラリに依存しています。多くのSSH関連クラス(サーバーとユーザーの詳細の提供、暗号化の詳細の指定、OpenSSH互換の秘密キーの提供など。ただし、SSH自体も非常に複雑です)。 SSHライブラリ、他のコマンドの出力処理の簡単な実装、さらにはインタラクティブなクラスなど。

3
neyc

数年前にこれにganymedeを使用しました... http://www.cleondris.ch/opensource/ssh2/

1
KarlP