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

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

2014-04-18 12:35 701 查看
利用Ganymed SSH-2 for Java 连接到远程服务器,然后执行shell命令;

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

[java]
view plaincopy





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();  
  
    }  

测试代码:

[java]
view plaincopy





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命令简单方法就实现了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: