我想知道是否有一种简单的方法可以将其作为java程序的一部分。
我希望能够ssh到另一台机器并在该机器上执行命令。
一个简单的例子是: runtime.exec(“说你好世界”); 将(在Mac上)有一个文本到语音引擎说你好世界。
有没有办法让java在另一台机器上运行此方法?
另外,假设上述情况可能,有没有办法同时ssh到多台机器?
由于
答案 0 :(得分:5)
有很多库可以做到这一点。我建议Ganymed SSH-2,official 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客户端和服务器