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

利用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命令简单方法就实现了。

你可能感兴趣的:(Ganymed SSH-2 for Java系列3之执行远程shell 命令)