您的位置:首页 > 运维架构 > Shell

Ganymed SSH-2 for Java系列3之执行远程shell 命令

2014-02-24 18:42 615 查看
利用Ganymed SSH-2 for Java 连接到远程服务器,然后执行shell命令;

首先我们再在之前CommandRunner类中再添加一个执行shell命令的方法,具体如下所示:

public static String execShellScript(String host, String username,
String password,

String cmd, int port) throws IOException {

if (logger.isInfoEnabled()) {

logger.info("running SSH cmd [" + cmd + "]");

}

Connection conn = null;

Session sess = null;

InputStream stdout = null;

BufferedReader br = null;

StringBuffer buffer = new StringBuffer("exec result:");
buffer.append(System.getProperty("line.separator"));// 换行
try {

conn = getOpenedConnection(host, username, password, port);

sess = conn.openSession();

sess.execCommand(cmd);

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

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

while (true) {

// attention: do not comment this block, or you will hit
// NullPointerException

// when you are trying to read exit status

String line = br.readLine();

if (line == null)

break;

buffer.append(line);
buffer.append(System.getProperty("line.separator"));// 换行

if (logger.isInfoEnabled()) {

logger.info(line);

}

}

} finally {

sess.close();

conn.close();

}

return buffer.toString();

}


测试代码:

public static void main(String[] args) {

String cmd = "uname -a";

try {
String info = CommandRunner.execShellScript("172.16.18.141", "root",
"123456",cmd,22);

System.out.println("info is:"+info);
} catch (IOException e) {
e.printStackTrace();
}

}


执行结果

log4j:WARN No appenders could be found for logger (com.ssh2.shell.ganymed.CommandRunner).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

info is:exec result:

Linux localhost.localdomain 2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

至此,连接远程服务器执行shell命令简单方法就实现了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: