java中的ssh(在另一台机器上运行命令)

时间:2013-03-14 17:12:49

标签: java ssh

我想知道是否有一种简单的方法可以将其作为java程序的一部分。

我希望能够ssh到另一台机器并在该机器上执行命令。

一个简单的例子是:     runtime.exec(“说你好世界”); 将(在Mac上)有一个文本到语音引擎说你好世界。

有没有办法让java在另一台机器上运行此方法?

另外,假设上述情况可能,有没有办法同时ssh到多台机器?

由于

4 个答案:

答案 0 :(得分:5)

有很多库可以做到这一点。我建议Ganymed SSH-2official OpenSSH website中也提到了{{3}}。在同一站点中,您还可以找到可用于Java的其他库。

这是使用Ganymed SSH-2通过SSH执行ls -r命令的示例:

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执行命令所需的唯一功能,但我希望它对你来说是一个很好的起点。

答案 1 :(得分:2)

查看JSch

至于在同一时间执行?除非你打算产生多个线程来处理你的远程机器列表,否则不是真的。

答案 2 :(得分:1)

如果您使用的是ssh命令可用的系统,并且ssh keys are set up以避免输入密码,那么最简单的就是

runtime.exec("ssh remote_comp 'say hello world'");

答案 3 :(得分:0)

我建议你看看Apache MINA SSHD,它可以用来写java客户端和服务器