当前位置:首页 > 科技  > 软件

还不会用Java操作远程服务器?

来源: 责编: 时间:2024-09-10 09:47:18 240观看
导读java操作服务器JSch 是一个纯 Java 实现的 SSH2 客户端库,它允许 Java 应用程序通过 SSH 协议连接到 SSH 服务器,并执行命令、传输文件等。JSch 是基于 SSH-2 协议的一个开源项目,广泛用于需要远程执行命令或文件传输的

java操作服务器

JSch 是一个纯 Java 实现的 SSH2 客户端库,它允许 Java 应用程序通过 SSH 协议连接到 SSH 服务器,并执行命令、传输文件等。JSch 是基于 SSH-2 协议的一个开源项目,广泛用于需要远程执行命令或文件传输的 Java 应用程序中。qIB28资讯网——每日最新资讯28at.com

主要特点

  • 纯 Java 实现:不依赖于任何本地库或第三方工具,完全用 Java 编写,因此具有很好的跨平台性。
  • SSH2 协议支持:支持 SSH-2 协议,包括密钥认证、密码认证、公钥认证等多种认证方式。
  • 命令执行:允许通过 SSH 连接执行远程命令,并获取命令的输出结果。
  • 文件传输:支持 SFTP(SSH File Transfer Protocol)协议,用于在客户端和服务器之间安全地传输文件。
  • 端口转发:支持本地端口转发和远程端口转发,可以用于创建安全的隧道。
  • 会话管理:提供会话管理功能,包括会话的创建、认证、关闭等。

使用场景

  • 自动化部署:在自动化部署脚本中,使用 JSch 连接到远程服务器,执行部署命令。
  • 远程监控:通过 SSH 连接远程服务器,执行监控命令,并获取监控数据。
  • 文件同步:使用 SFTP 协议安全地同步文件到远程服务器或从远程服务器下载文件。
  • 远程执行脚本:在远程服务器上执行脚本或程序,并获取执行结果。

引入依赖

<dependency>      <groupId>com.github.mwiede</groupId>      <artifactId>jsch</artifactId>      <version>0.2.19</version>    </dependency>

创建连接

获取会话

public Session getSession(){        if( this.session != null ){            return this.session;        }        try {            jsch.getSession(property.getUsername(), property.getHost(), property.getPort());            session = jsch.getSession(property.getUsername(), property.getHost(), property.getPort());            session.setPassword(property.getPassword());            session.setConfig("StrictHostKeyChecking","no");// 设置第一次登陆的时候提示            session.setConfig("max_input_buffer_size","1024");//            Properties sshConfig = new Properties();            sshConfig.put("StrictHostKeyChecking", "no");            session.setConfig(sshConfig);            session.connect();            return session;        } catch (JSchException e) {            throw new RuntimeException(e);        }    }

获取Sftp连接

public static ChannelSftp getSftp(Session session){        try {            Channel channel = session.openChannel("sftp");            channel.connect();            ChannelSftp sftp = (ChannelSftp) channel;            sftp.setFilenameEncoding("UTF-8");            return sftp;        } catch (Exception e) {            throw new RuntimeException(e);        }    }

获取命令执行连接

public static ChannelExec getExec(Session session){        try {            Channel channel = session.openChannel("exec");//            channel.connect();            ChannelExec exec = (ChannelExec) channel;            return exec;        } catch (Exception e) {            throw new RuntimeException(e);        }    }

执行脚本

public static void execCommand(ChannelExec exec,String command){        try {            exec.setCommand(command);            InputStream in = exec.getInputStream();            exec.connect();            BufferedReader inputReader = new BufferedReader(new InputStreamReader(in, "UTF8"));            String inputLine;            while ((inputLine = inputReader.readLine()) != null) {                System.out.println(inputLine);            }        } catch (Exception e) {            throw new RuntimeException(e);        } finally {            exec.disconnect();        }    }

执行文件下载

public static void fileDownload(ChannelSftp sftp, String path,String dist){        try {            InputStream is = sftp.get(path);            FileUtils.copyInputStreamToFile(is, FileUtils.getFile(dist,FilenameUtils.getName(path)));            is.close();        } catch (SftpException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }

测试

获取会话

public static Session getSession(){    ConnectProperty property = new ConnectProperty();    property.setHost("...");    property.setPort(22);    property.setUsername("...");    property.setPassword("...");    ConnectHelper helper = new ConnectHelper(property);    return helper.getSession();}

下载文件

public static void download(Session session){    ChannelSftp sftp = ConnectHelper.getSftp(session);    ConnectHelper.fileDownload(sftp,"/home/test/1.txt","E://home//tmp");}

执行命令

public static void execCommand(Session session){    ChannelExec exec = ConnectHelper.getExec(session);    ConnectHelper.execCommand(exec, "pwd");

qIB28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-112725-0.html还不会用Java操作远程服务器?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Go1.23 新特性:争议最大的 iter 迭代器,可遍历万物!

下一篇: 停止使用 `let` 或为什么它在 JavaScript/TypeScript 中是不必要的

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    7月7日消息,近日有微博网友@长三角行健者爆料称,据经销商集团反馈,小米汽车目前已经开始了交付中心的筛选工作,要求候选场地至少有120个车位,建筑不能低
  • Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    图片来源:图虫创意日前,Meta创始人兼CEO 马克&middot;扎克伯发布公开信,宣布Meta计划裁员超11000人,占其员工总数13%。他公开承认了自己的预判失误:&ldquo;不仅
Top