智能一体化运维平台(一)java实现ssh连接

2023-11-15

一、思路

    (1)作为java的web后台应用,在做ssh连接的时候,比如导入所需要的协议jar包,如ssh.jar,本次测试,本人使用的是

    (2) 导入jar包后,开始进入代码编程,首先需要进行创建用户名、密码、端口、ip地址等变量,用来存储对应连接的服务器信息。

    (3)创建连接对象,同时在创建会话对象,在java中一切皆对象。

    (4)判断连接是否成功,如果成功执行命令代码,如果失败,进行返回信息。

    (5)在连接成功后,需要对接收的数据进行处理,此处的数据是StringBuilder()方式来接收。

    (6)此时需要将接收到的数据进行解析,使用while()循环方法。

二、实现步骤

String str="";
	public String Qinghc(){
		System.out.println("执行244");
		String hostname="127.0.0.1";//IP地址
	    String username="weblogic";//用户名
	    String password="sepc*92333";//密码
	    Connection conn=new Connection(hostname,10022);//创建连接,参数:IP,端口
	    Session ssh=null;//设置会话
	    String line=null;//接收line数据
	    StringBuilder sb=null;//设置StringBuilder 类型
	    try{
	   	 conn.connect();//开启连接
	      //通过conn.authenticateWithPassword方法,参数用户名,密码,开始连接,返回一个boolean 类型值
	   	 boolean isconn=conn.authenticateWithPassword(username, password);
	   	 //判断访问是否成功
	   	 if(!isconn){
	   		 System.out.println("服务器登陆失败!!!!");
	   	 }else{
	   		 
	   		 System.out.println("登陆成功!!");
	   	            //成功后,打开会话(创建会话)
	   		 ssh=conn.openSession();
	            	//通过execComand方法执行shell 命令
	   		 ssh.execCommand("echo 0>/home/weblogic/Oracle/Middleware/user_projects/domains/i6000/bin/nohup.out");
	   		   //设置InputStream 输入模式,设置ssh的方式
	   		 InputStream is =new StreamGobbler(ssh.getStdout());
	   		  //通过buffereadReader 来接收inputStreamReader 为utf-8 的所有信息。is为当前
	   		 BufferedReader brs=new BufferedReader(new InputStreamReader(is,"UTF-8"));
	   		sb =new StringBuilder();
	   		 while(true){//循环读取信息。
	   			 line=brs.readLine();
	   		    
	   			if(line==null){
	   				 break;
	   			 }
	   			sb.append(line+"<br>");//追加显示
	   			
	   			 //System.out.println(strs.size());
	   			 System.out.println(line+"<br/>");//打印处读取的出的行信息
	   		 }
	   			
	   	 }
	   	 ssh.close();//关闭session会话连接
	   	 conn.close();//关闭conn连接
	   	str="缓存清理完毕,请查看<br>"+sb;
	    }catch(IOException e){
	    	str="命令执行失败!!!";
	   	 System.out.println(e.toString());
	   	 e.printStackTrace();
	    }
	    return str;
	    
	}

以上代码块,作为测试是没问题,但是对于企业来说,以上代码还是相对过于臃肿的不可复用的,具体优化如下:

1.需要将用户名、密码、Ip,端口等变化较多的代码,进行单独存放,以便于管理和修改。

2.通过代码块进行读取userinfoX.properties中的信息

	    String[] ps=new String[4];//设置大小为4的String数组,用于存放从userinfox.properties中的数据
		ResourceBundle resourced=ResourceBundle.getBundle("userinfoX");//读取文件数据
		Enumeration<String> allkey=resourced.getKeys();//将数据集中的keys进行提取
		while(allkey.hasMoreElements()){//通过循环keys的内容循环出vlue值
			String key=allkey.nextElement();
			String value=resourced.getString(key);
			if("username"==key||"username".equals(key)){
				ps[0]=value;
			}else if("pwd"==key||"pwd".equals(key)){
				ps[1]=value;
				
			}else if ("portNew"==key||"portNew".equals(key)){
				ps[2]=value;
			}else if ("ipnew"==key||"ipnew".equals(key)){
				ps[3]=value;
			}
			
			System.out.println(key+"---"+value);
	        
   }
		 for (int i = 0; i < ps.length; i++) {
			System.out.println(ps[i]);//打印出值
		}

3.获取到相关的配置后,开始优化ssh连接代码

(1)优化执行命令

	public String getCmd(){
		SizeTool st=new  SizeTool();
	    Userinfo u=st.SizFinfo();
	    List<DosM> dms=u.getDms();
	    String strcmd="";
		 for (int i=0;i<dms.size();i++) {
		    	DosM dox=dms.get(i);
				if(dox.getXuL().equals(cmdx)||cmdx==dox.getXuL()){
					System.out.println(cmdx+"--cmdx");
					strcmd=dox.getStrcmd();
					
				}
			}
		 
		
		 return strcmd;
	}

(2)优化ssh连接命令

       ReadProties p=new  ReadProties();
			String[] os=p.getNew();
			String hostname=os[3];
		    String username=os[0];
		    String password=os[1];
	    Connection conn=new Connection(hostname,Integer.parseInt(os[2]));
	    Session ssh=null;
	   
	    try{
	   	 conn.connect();
	   	 boolean isconn=conn.authenticateWithPassword(username, password);
	   	 
	   	 if(!isconn){
	   		 System.out.println("服务器登陆失败!!!!");
	   	 }else{
	   		 
	   		 System.out.println("登陆成功!!");
	   		 ssh=conn.openSession();
	   	   
	   		 ssh.execCommand(strcmd);
	   		
	   		 InputStream is =new StreamGobbler(ssh.getStdout());

三、注意点

   (1)开启session、connect的后,在最后一点要close掉,如果不进行此操作,会导致服务器会话连接数不停增大,导致服务器连接数达到最大设置限制后,其他服务将无法连接服务器。

   (2) BufferedReader brs=new BufferedReader(new InputStreamReader(is,"UTF-8")); 必须设置UTF-8,这个根据服务器的配置决定,可以在服务器上执行echo $LANG命令查询

   (3)代码执行顺序,先创建conn连接,再进行session会话连接,关闭时,先关闭session 再关闭conn。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

智能一体化运维平台(一)java实现ssh连接 的相关文章

随机推荐

  • 主机与VMware的Linux虚拟机之间共享交换文件

    搭建环境 主机系统 Windows7 Ultimate VM软件 VMware Workstation 7 1 3 虚拟机系统 Linux Ubuntu 10 10 操作步骤 1 在主机上新建一个共享路径 用于将来和虚拟机之间进行共享文件
  • 几种常见模式识别算法整理和总结

    这学期选了门模式识别的课 发现最常见的一种情况就是 书上写的老师ppt上写的都看不懂 然后绕了一大圈去自己查资料理解 回头看看发现 Ah ha 原来本质的原理那么简单 自己一开始只不过被那些看似formidable的细节吓到了 所以在这里把
  • springboot使用SSE

    1 pom文件
  • 传递空指针,在函数中开辟内存并返回

    include
  • android 退出程序关闭死循环线程的一种方法(开源中国客户端下载APK疑问总结)...

    为什么80 的码农都做不了架构师 gt gt gt 在android中往往退出程序时会调用以下方法 那么这个方法一定有效吗 在什么情况下没有用呢 1 关闭掉所有界面 2干掉当前进程 android os Process killProces
  • Linux常用库函数

    目录 1 getopt 2 getopt long 3 dlopen 4 分区信息和文件属性 4 1 fstatfs statfs 4 2 statvfs fstatvfs 4 3 stat fstat 1 getopt getopt被用来
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Android -BLE 蓝牙模块开发

    Android Ble蓝牙开发Demo示例 扫描 连接 发送和接收数据 分包解包 附源码 简书前言 万物互联的物联网时代的已经来临 ble蓝牙开发在其中扮演着举重若轻的角色 最近刚好闲一点 抽时间梳理下这块的知识点 涉及ble蓝牙通讯的客户
  • 阿里云docker镜像加速 / docker.service 启动失败解决方案

    使用docker时报错 Cannot connect to the Docker daemon at unix var run docker sock Is the docker daemon running 试着用启动docker ser
  • JavaWeb-Response-下载指定路径下的文件

    下载文件思路 1 获取下载文件的路径 2 下载的文件名 3 设置想办法让浏览器能够支持下载我们需要的东西 4 获取下载文件的输入流 5 创建缓冲区 6 获取OutputStream对象 7 将FileOutStream流写入到buffer缓
  • 软件测试--------(人员管理web项目)

    软件测试计划书 1 引言部分 2 任务概述 3 测试项 4 需要测试的功能 5 方法与策略 6 不需测试的功能 7 测试项通过 失败的标准 8 测试中断和恢复的规定 9 测试完成所提交的材料 10 环境需求 11 测试人员的工作职责 12
  • uni-app实现点击按钮复制内容

    uni setClipboardData obj API方法
  • 手撸算法-两数之和-牛客

    描述 给出一个整数数组 请在数组中找出两个加起来等于目标值的数 你给出的函数twoSum 需要返回这两个数字的下标 index1 index2 需要满足 index1 小于index2 注意 下标是从1开始的 假设给出的数组中只存在唯一解
  • 记一次映射公网地址FTP服务问题的解决方法

    因为需要FTP公网进行访问 遂在公司搭建FTP服务使用软件 免费开源的Fillzilla Server版本 当然这不是主要的添加用户密码 用户访问目录 更改21端口为21212出现棘手问题 因为公司使用cisco路由器公网接入 默认所有公网
  • JavaWeb 文件上传和下载

    目录 一 文件上传 1 文件上传和下载的使用说明 2 文件上传基本原理 3 文件上传经典案例 3 1 页面实现 3 2 servlet实现 3 3 工具类实现 3 4 运行测试 3 5 注意事项 二 文件下载 1 文件下载基本原理 2 文件
  • 2023年自学网络安全学习路线,收藏这一篇就够了(超详细)

    00 网络安全为啥突然 火 了 随着网络空间成为第五空间 社会基础产业全面互联网化 网络安全 或称广义的信息安全 面临的威胁越来越大 对网络安全的人才需求也呈现出井喷趋势 即使目前很多人可以自学成才 网络空间安全 也成为一级学科 但根据 第
  • js动态加载js和css

    一 动态加载CSS动态创建css样式有两种方式 1 动态插入css外部文件的方法 function loadStyle url var link document createElement link link type text css
  • Android Instrumentation模拟鼠标点击事件

    看了几遍网上的博客一直没有 模拟出鼠标点击事件和按钮事件 后来抱着试试态度再重试的时候终于有所斩获 下面把具体的情况记录一下 首先我们必须了解类 Instrumentation Instrumentation发送键盘鼠标事件 Instrum
  • 什么是DNS服务器?有哪些作用?

    什么是DNS服务器 DNS服务器是 Domain Name System或者Domain Name Service 域名系统或者域名服务 域名系统为Internet上的主机分配域名地址和IP地址 用户使用域名地址 该系统就会自动把域名地址转
  • 智能一体化运维平台(一)java实现ssh连接

    一 思路 1 作为java的web后台应用 在做ssh连接的时候 比如导入所需要的协议jar包 如ssh jar 本次测试 本人使用的是 2 导入jar包后 开始进入代码编程 首先需要进行创建用户名 密码 端口 ip地址等变量 用来存储对应