龙空技术网

JSch神器:Java程序操控远程Linux主机实战

大数据从业者FelixZh 135

前言:

眼前小伙伴们对“js读取远程文件内容”大概比较关心,小伙伴们都需要学习一些“js读取远程文件内容”的相关资讯。那么小编在网上搜集了一些关于“js读取远程文件内容””的相关文章,希望大家能喜欢,我们一起来了解一下吧!

概述

JSch特别方便开发人员使用JAVA操作远程Linux主机,如重启、执行脚本、执行命令、并能够获取结果。JSch是一个SSH2的纯Java实现。JSch允许您连接到sshd服务器并使用端口转发、X11转发、文件传输等,您可以将其功能集成到自己的Java程序中。JSch使用BSD开源协议,该协议是一个给予使用者很大自由的协议,基本上等同于为所欲为:可以自由的使用、修改源代码、也可以将修改后的代码作为开源或者专有软件再发布。

pom文件

<dependency>    <groupId>com.jcraft</groupId>    <artifactId>jsch</artifactId>    <version>0.1.55</version></dependency>
使用方法

只需实例化一个Session,就可以为所欲为的操作Linux。

实例化Session代码

public static Session getSession(HostParams hostParams) throws JSchException {    JSch jSch = new JSch();    if (Files.exists(Paths.get(hostParams.getIdentity()))) {        jSch.addIdentity(hostParams.getIdentity(), hostParams.getPassphrase());    }    Session session = jSch.getSession(hostParams.getUsr(), hostParams.getPwd(), hostParams.getSshPort());    session.setPassword(hostParams.getPwd());    Properties properties = new Properties();    properties.put("StrictHostKeyChecking", "no");    session.setConfig(properties);    return session;}

操作远程Linux主机并获取返回结果

public static List<String> rmtExec(Session session, String cmd) throws JSchException {        List<String> resLines = new ArrayList<>();        ChannelExec channel = null;        try {            channel = (ChannelExec) session.openChannel("exec");            channel.setCommand(cmd);            InputStream inputStream = channel.getInputStream();            channel.connect(50_000);            try {                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));                String inputLine;                while ((inputLine = bufferedReader.readLine()) != null) {                    System.out.println(inputLine);                    resLines.add(inputLine);                }            } finally {                if (inputStream != null) {                    try {                        inputStream.close();                    } catch (Exception ex) {                        ex.printStackTrace();                    }                }            }        } catch (IOException ex) {            ex.printStackTrace();        } finally {            if (channel != null) {                try {                    channel.disconnect();                } catch (Exception ex) {                    ex.printStackTrace();                }            }        }        return resLines;    }
案例演示

远程操作Linux主机,执行如下命令,获取结果:

ls  /opt

我们先看下远程Linux主机/opt下有什么内容:

通过JSch操作的结果​:

总结

​墙裂推荐JSch,你终会用到​,trust me!!

标签: #js读取远程文件内容