java jsch执行远程命令


/*
* SSHManager
*
* @author cabbott
* @version 1.0
*/
package jsch;

import com.jcraft.jsch.*;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SSHManager
{
private static final Logger LOGGER = Logger.getLogger(SSHManager.class.getName());

private JSch jschSSHChannel;

private String strUserName;

private String strConnectionIP;

private int intConnectionPort;

private String strPassword;

private Session sesConnection;

private int intTimeOut;

private void doCommonConstructorActions(String userName, String password, String connectionIP,
String knownHostsFileName)
{
jschSSHChannel = new JSch();

try
{
jschSSHChannel.setKnownHosts(knownHostsFileName);
}
catch (JSchException jschX)
{
logError(jschX.getMessage());
}

strUserName = userName;
strPassword = password;
strConnectionIP = connectionIP;
}

public SSHManager(String userName, String password, String connectionIP, String knownHostsFileName)
{
doCommonConstructorActions(userName, password, connectionIP, knownHostsFileName);
intConnectionPort = 22;
intTimeOut = 60000;
}

public SSHManager(String userName, String password, String connectionIP, String knownHostsFileName,
int connectionPort)
{
doCommonConstructorActions(userName, password, connectionIP, knownHostsFileName);
intConnectionPort = connectionPort;
intTimeOut = 60000;
}

public SSHManager(String userName, String password, String connectionIP, String knownHostsFileName,
int connectionPort, int timeOutMilliseconds)
{
doCommonConstructorActions(userName, password, connectionIP, knownHostsFileName);
intConnectionPort = connectionPort;
intTimeOut = timeOutMilliseconds;
}

public String connect()
{
String errorMessage = null;

try
{
sesConnection = jschSSHChannel.getSession(strUserName, strConnectionIP, intConnectionPort);
sesConnection.setConfig("StrictHostKeyChecking", "no");
sesConnection.setPassword(strPassword);
// UNCOMMENT THIS FOR TESTING PURPOSES, BUT DO NOT USE IN PRODUCTION
// sesConnection.setConfig("StrictHostKeyChecking", "no");
sesConnection.connect(intTimeOut);
}
catch (JSchException jschX)
{
errorMessage = jschX.getMessage();
}

return errorMessage;
}

private String logError(String errorMessage)
{
if (errorMessage != null)
{
LOGGER.log(Level.SEVERE, "{0}:{1} - {2}", new Object[] {strConnectionIP, intConnectionPort, errorMessage});
}

return errorMessage;
}

private String logWarning(String warnMessage)
{
if (warnMessage != null)
{
LOGGER.log(Level.WARNING, "{0}:{1} - {2}", new Object[] {strConnectionIP, intConnectionPort, warnMessage});
}

return warnMessage;
}

public String sendCommand(String command)
{
StringBuilder outputBuffer = new StringBuilder();

try
{
Channel channel = sesConnection.openChannel("exec");
((ChannelExec) channel).setCommand(command);
InputStream commandOutput = channel.getInputStream();
channel.connect();
int readByte = commandOutput.read();

while (readByte != 0xffffffff)
{
outputBuffer.append((char) readByte);
readByte = commandOutput.read();
}

channel.disconnect();
}
catch (IOException ioX)
{
logWarning(ioX.getMessage());
return null;
}
catch (JSchException jschX)
{
logWarning(jschX.getMessage());
return null;
}

return outputBuffer.toString();
}

public void close()
{
sesConnection.disconnect();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值