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

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

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

java操作服务器

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

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

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

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

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

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

标签:
  • 热门焦点
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对&ldquo;势&rdquo;的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • 三星Galaxy Z Fold5今日亮相:厚度缩减但仍略显厚重

    据官方此前宣布,三星将于7月26日也就是今天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top