需要先导入ssh bulid包,方法如下:
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public String execute(String ip, String cmd) {
String username = "root";
String password = "password";
try {
// 创建连接
Connection conn = new Connection ( ip, 22 );
// 启动连接
conn.connect ();
// 验证用户密码
conn.authenticateWithPassword ( username, password );
Session session = conn.openSession ();
//执行命令
session.execCommand ( cmd );
InputStream stdout = new StreamGobbler ( session.getStdout () );
BufferedReader br = new BufferedReader ( new InputStreamReader ( stdout ) );
StringBuffer buffer = new StringBuffer ();
String line;
while ((line = br.readLine ()) != null) {
buffer.append ( line + "\n" );
}
String result = buffer.toString ();
session.close ();
conn.close ();
//如果没有异常,返回结果为命令执行结果,如果有异常,返回null
return result;
} catch (IOException e) {
e.printStackTrace ();
return null;
}
}
也可以把redline()读取换成read(),从一行行读取变成按字符读取:
InputStream stdout = new StreamGobbler ( session.getStdout () );
StringBuffer buffer = new StringBuffer ();
byte[] bs = new byte[1024 * 16];
while(true) {
int count = stdout.read(bs);
if(count == -1) {
break;
} else {
buffer.append(new String(bs, 0, count));
}
}
stdout.close();
String result = buffer.toString ();
本文介绍了一种使用Java通过SSH协议远程执行Linux命令的方法。通过导入sshbulid包,创建并启动连接,验证用户密码,然后打开会话并执行指定命令。文章详细展示了如何读取命令执行结果,并提供了两种不同的输出方式。
431

被折叠的 条评论
为什么被折叠?



