java远程执行shell命令

1、连接服务器,执行shell的方法

package com.shishike.susie.utility;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Properties;
import java.util.Vector;

import org.apache.log4j.Logger;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.ChannelExec;
import com.shishike.susie.model.SSHUserInfo;



public class ExecuteShell {
	private String ipAddress;  
	  
    private String username;  
  
    private String password;  
  
    public static final int DEFAULT_SSH_PORT = 22;  //默认是22
  
    private Vector<String> stdout;  
	
    private static Logger logger = Logger.getLogger(ExecuteShell.class);
	
    public ExecuteShell(final String ipAddress, final String username, final String password) {  
        this.ipAddress = ipAddress;  
        this.username = username;  
        this.password = password;  
        stdout = new Vector<String>();  
    }  
  
    public int execute(final String command) {  
        int returnCode = 0;  
        JSch jsch = new JSch();  
        SSHUserInfo userInfo = new SSHUserInfo();  
  
        try {  
            // Create and connect session.  
            Session session = jsch.getSession(username, ipAddress, DEFAULT_SSH_PORT);  
            session.setPassword(password);  
            session.setUserInfo(userInfo);  
            session.setConfig("StrictHostKeyChecking", "no");//去掉连接确认的
            session.connect(30000);  
  
            // Create and connect channel.  
            Channel channel = session.openChannel("exec");  
            ((ChannelExec) channel).setCommand(command);  
  
            channel.setInputStream(null);  
            BufferedReader input = new BufferedReader(new InputStreamReader(channel  
                    .getInputStream()));  
  
            channel.connect();  
            System.out.println("The remote command is: " + command);  
  
            // Get the output of remote command.  
            String line;  
            while ((line = input.readLine()) != null) {  
                stdout.add(line);  
            }  
            input.close();  
  
            // Get the return code only after the channel is closed.  
            if (channel.isClosed()) {  
                returnCode = channel.getExitStatus();  
            }  
  
            // Disconnect the channel and session.  
            channel.disconnect();  
            session.disconnect();  
        } catch (JSchException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return returnCode;  
    }  
    
    public static boolean executeRemoteShell(String ip, String username, String passwd, String command) {
    	ExecuteShell sshExecutor = new ExecuteShell(ip, username, passwd);  
        int result = sshExecutor.execute(command);  
        Vector<String> stdout = sshExecutor.getStandardOutput();  
        for (String str : stdout) {  
            System.out.println(str);
            logger.info(str);
        }
        if (result == 0)
        	return true;
        else 
        	return false;
    }
    public Vector<String> getStandardOutput() {  
        return stdout;  
    }
}

2、调用方式

	@Override
	public boolean mkDir(String jenkinsUser,String jenkinsPass,String serverAddr,String moduleName) {
		// TODO Auto-generated method stub
		
		String warpath="/home/work/.jenkins/jobs"+"/"+moduleName;
	    String command = String.format("if [ ! -d %s ]; then mkdir %s;fi",warpath,warpath);//command格式要正确
	   Boolean res= ExecuteShell.executeRemoteShell(serverAddr,jenkinsUser,jenkinsPass,command);
			
		return res;
	}

3、使用的依赖项

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.51</version>
</dependency>

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值