帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
Java利用JSCH库远程连接Linux服务器以及操作多条Shell命令
发布时间:2024-02-29 17:07:43   分类:帮助文档
Java利用JSCH库远程连接Linux服务器以及操作多条Shell命令 ================前情提要================ 为了实现DHCP服务器的IP存储、回收和查询机制,我们需要将服务器中LXD容器的网卡IP查询出来,并且存储到服务器中的Mysql中。所以,下面介绍如何通过Java远程连接Linux服务器以及操作多条Shell命令。 一、JAVA连接至Linux服务器 创建Maven项目,导入依赖jsch com.jcraft jsch 0.1.55 实现远程连接,往后我们只需要调用如下两个方法即获取连接和关闭连接。连接的原理即:创建session对话,使用ip,port,userName,password进行校验,函数返回session对话 //jsch创建连接 public Session getJSchSession(String ip , int port, String userName, String password){ JSch jSch = new JSch(); Session session = null; try { //创建连接 session = jSch.getSession(userName,ip,port); session.setPassword(password); //是否使用密钥登录,一般默认为no session.setConfig("StrictHostKeyChecking", "no"); //启用连接 session.connect(); System.out.println("==============服务器连接成功=============="); }catch (Exception e){ e.printStackTrace(); System.out.println("==============服务器连接失败=============="); } return session; } //jsch关闭连接 public void closeJSchSession(Session session){ if (session != null) { try { session.disconnect(); System.out.println("===========服务器连接关闭成功==========="); }catch (Exception e){ e.printStackTrace(); System.out.println("===========服务器连接关闭失败==========="); } } } 二、JAVA操作多条Shell命令 网上找了很多资料,发现大家都是只执行一条命令,这在实际使用中几乎不可能,我们一般都需要传入Shell命令集合进行操作,并且如果有返回值要进行接受。根据网上的资料,我进行了自己的代码编写。 操作原理 使用上述连接中实现的session对话创建Channel执行通道命令集合参数传递给通道,连接通道,通道执行命令,使用IO流读命令结果循环读取结果并且将返回值拼接为字符串,若没有返回值则标注将拼接好的字符串保存到集合,并且返回 //用来执行命令 //Session表示传递连接对话,commands表示传递命令集合 public List getCmdResult(Session session , List commands){ //用来存放命令的返回值 List cmdResult = new ArrayList<>(); for (String command : commands) { Channel channel = null; try { //创建执行通道 channel = session.openChannel("exec"); //设置命令 ((ChannelExec) channel).setCommand(command); //连接通道 channel.connect(); //读取通道的输出 InputStream in = channel.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); //存放命令的执行结果,如果结果有很多行,则每次line的值不同 String line; //lines用来拼接line结果 StringBuffer lines = new StringBuffer(); while ((line = reader.readLine()) != null) { //去除头尾的空格 line.trim(); lines = lines.append(line); } //如果命令执行没有返回值,则直接输出没有返回值 if (String.valueOf(lines).equals("")){ cmdResult.add("命令["+command+"]执行成功,但没有返回值"); }else { //否则将每行返回直接存入到list中 cmdResult.add(String.valueOf(lines)); } reader.close(); channel.disconnect(); } catch (JSchException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } return cmdResult; } 三、使用 简单的介绍一下调用过程【这里特别要注意:cd命令是不生效的。所谓不生效就是你不能先切换到某个目录,然后直接执行创建文件夹,创建文件夹的路径依然要写绝对路径】 public static void main(String[] args) { String ip = "服务器ip地址"; int port = 22; String userName = "服务器账号"; String password = "服务器密码"; List cmds = new ArrayList<>(); cmds.add("ls -l"); cmds.add("mkdir MyDir"); GetLinuxConnection GLC = new GetLinuxConnection(); Session session = GLC.getJSchSession(ip,port,userName,password); ExecLinuxCommands ELC = new ExecLinuxCommands(); List result = ELC.getCmdResult(session, cmds); result.forEach((x)-> System.out.println(x)); GLC.closeJSchSession(session); } 执行结果如下
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价