java ssh连接aix服务器执行命令

code小生 1年前 ⋅ 2040 阅读

一、所需jar包

ganymed-ssh2-build210.jar、commons-lang-2.6.jar

二、执行代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.commons.lang.StringUtils;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class SshLinux {
    private static String  DEFAULTCHART="UTF-8";
 
    /**
     * 登录主机
     * @return
     *      登录成功返回true,否则返回false
     */
    public static Connection login(String ip,
                                   String userName,
                                   String userPwd){
 
        boolean flg=false;
        Connection conn = null;
        try {
            conn = new Connection(ip);
            conn.connect();//连接
            flg=conn.authenticateWithPassword(userName, userPwd);//认证
            if(flg){
                System.out.println("=========登录成功========="+conn);
                return conn;
            }
        } catch (IOException e) {
            System.out.println("=========登录失败========="+e.getMessage());
            e.printStackTrace();
        }
        return conn;
    }
 
    /**
	 * 	远程执行shll脚本或者命令
	 * @param cmd
	 * 	即将执行的命令
	 * @return
	    *      命令执行完后返回的结果值
     */
    public static String execute(Connection conn,String cmd){
        String result="";
        try {
            if(conn !=null){
                Session session= conn.openSession();//打开一个会话
                session.execCommand(cmd);//执行命令
                result=processStdout(session.getStdout(),DEFAULTCHART);
                //如果为得到标准输出为空,说明脚本执行出错了
                if(StringUtils.isBlank(result)){
                    System.out.println("得到标准输出为空,链接conn:"+conn+",执行的命令:"+cmd);
                    result=processStdout(session.getStderr(),DEFAULTCHART);
                }else{
                    System.out.println("执行命令成功,链接conn:"+conn+",执行的命令:"+cmd);
                }
                conn.close();
                session.close();
            }
        } catch (IOException e) {
            System.out.println("执行命令失败,链接conn:"+conn+",执行的命令:"+cmd+"  "+e.getMessage());
            e.printStackTrace();
        }
        return result;
    }
    /**
     * 解析脚本执行返回的结果集
     * @param in 输入流对象
     * @param charset 编码
     * @return
     *       以纯文本的格式返回
     */
    private static String processStdout(InputStream in, String charset){
        InputStream  stdout = new StreamGobbler(in);
        StringBuffer buffer = new StringBuffer();;
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(stdout,charset));
            String line=null;
            while((line=br.readLine()) != null){
                buffer.append(line+"\n");
            }
        } catch (UnsupportedEncodingException e) {
            System.out.println("解析脚本出错:"+e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("解析脚本出错:"+e.getMessage());
            e.printStackTrace();
        }
        return buffer.toString();
    }

 

三、测试调用

public static void main(String[] args) {
		SshLinux s=new SshLinux();
		Connection con=SshLinux.login("20.1.2.231","fingtp", "1234qwer");
		String cmd="pwd";
		String result=s.execute(con, cmd);
		System.out.println(result);
}

 

以上测试代码是连接服务器,并输出当前路径

以上为执行结果。


全部评论: 0

    我有话说: