基于Java实现ssh命令登录主机执行shell命令过程解析
这篇文章主要介绍了基于Java实现ssh命令登录主机执行shell命令过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1、SSH命令
SSH为SecureShell的缩写,由IETF的网络小组(NetworkWorkingGroup)所制定;SSH为建立在应用层基础上的安全协议。SSH是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、DigitalUNIX、Irix,以及其他平台,都可运行SSH。
实际工作中,我们经常使用客户端工具(比如:SecureCRT,Xshell,MobaXterm等)SSH到主机上,执行一些操作命令。
如何使用Java语言实现SSH连接主机,并执行Shell命令呢?
2、Java实现SSH命令
1)代码实现如下:
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.UnsupportedEncodingException;
importjava.util.Calendar;
importorg.apache.commons.lang3.StringUtils;
importch.ethz.ssh2.Connection;
importch.ethz.ssh2.Session;
importch.ethz.ssh2.StreamGobbler;
publicclassSshUtil{
privatestaticStringDEFAULT_CHAR_SET="UTF-8";
privatestaticStringtipStr="=======================%s=======================";
privatestaticStringsplitStr="=====================================================";
/**
*登录主机
*@return
*登录成功返回true,否则返回false
*/
publicstaticConnectionlogin(Stringip,StringuserName,Stringpassword){
booleanisAuthenticated=false;
Connectionconn=null;
longstartTime=Calendar.getInstance().getTimeInMillis();
try{
conn=newConnection(ip);
conn.connect();//连接主机
isAuthenticated=conn.authenticateWithPassword(userName,password);//认证
if(isAuthenticated){
System.out.println(String.format(tipStr,"认证成功"));
}else{
System.out.println(String.format(tipStr,"认证失败"));
}
}catch(IOExceptione){
System.err.println(String.format(tipStr,"登录失败"));
e.printStackTrace();
}
longendTime=Calendar.getInstance().getTimeInMillis();
System.out.println("登录用时:"+(endTime-startTime)/1000.0+"s\n"+splitStr);
returnconn;
}
/**
*远程执行shell脚本或者命令
*@paramcmd
*即将执行的命令
*@return
*命令执行完后返回的结果值
*/
publicstaticStringexecute(Connectionconn,Stringcmd){
Stringresult="";
Sessionsession=null;
try{
if(conn!=null){
session=conn.openSession();//打开一个会话
session.execCommand(cmd);//执行命令
result=processStdout(session.getStdout(),DEFAULT_CHAR_SET);
//如果为得到标准输出为空,说明脚本执行出错了
if(StringUtils.isBlank(result)){
System.err.println("【得到标准输出为空】\n执行的命令如下:\n"+cmd);
result=processStdout(session.getStderr(),DEFAULT_CHAR_SET);
}else{
System.out.println("【执行命令成功】\n执行的命令如下:\n"+cmd);
}
}
}catch(IOExceptione){
System.err.println("【执行命令失败】\n执行的命令如下:\n"+cmd+"\n"+e.getMessage());
e.printStackTrace();
}finally{
if(conn!=null){
conn.close();
}
if(session!=null){
session.close();
}
}
returnresult;
}
/**
*解析脚本执行返回的结果集
*@paramin输入流对象
*@paramcharset编码
*@return
*以纯文本的格式返回
*/
privatestaticStringprocessStdout(InputStreamin,Stringcharset){
InputStreamstdout=newStreamGobbler(in);
StringBufferbuffer=newStringBuffer();
try{
BufferedReaderbr=newBufferedReader(newInputStreamReader(stdout,charset));
Stringline=null;
while((line=br.readLine())!=null){
buffer.append(line+"\n");
}
}catch(UnsupportedEncodingExceptione){
System.err.println("解析脚本出错:"+e.getMessage());
e.printStackTrace();
}catch(IOExceptione){
System.err.println("解析脚本出错:"+e.getMessage());
e.printStackTrace();
}
returnbuffer.toString();
}
publicstaticvoidmain(String[]args){
Stringip="192.168.123.234";//此处根据实际情况,换成自己需要访问的主机IP
StringuserName="root";
Stringpassword="password";
Connectionconn=SshUtil.login(ip,userName,password);
Stringcmd="cd/home/miracle&&pwd&&ls&&catluna.txt";
Stringresult=SshUtil.execute(conn,cmd);
System.out.println(splitStr+"\n执行的结果如下:\n"+result+splitStr);
}
}
2)运行结果如下:
=======================认证成功======================= 登录用时:0.859s ===================================================== 【执行命令成功】 执行的命令如下: cd/home/miracle&&pwd&&ls&&catluna.txt ===================================================== 执行的结果如下: /home/miracle luna.txt Hello,I'mSshUtil. Nicetomeetyou.^_^ =====================================================
3)pom.xml引用添加如下:
org.apache.commons commons-lang3 3.9 ch.ethz.ganymed ganymed-ssh2 262
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。