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

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

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

java操作服务器

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

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

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

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

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

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

标签:
  • 热门焦点
  • 容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    8月5日消息,云存储服务商Backblaze发布了最新的硬盘故障率报告,年故障率有所上升。Backblaze发布的硬盘季度统计数据,其中包括故障率等重要方面。这些结
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • 首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
Top