基于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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。