Java利用JSCH库远程连接Linux服务器以及操作多条Shell命令

这篇具有很好参考价值的文章主要介绍了Java利用JSCH库远程连接Linux服务器以及操作多条Shell命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

================前情提要================

为了实现DHCP服务器的IP存储、回收和查询机制,我们需要将服务器中LXD容器的网卡IP查询出来,并且存储到服务器中的Mysql中。所以,下面介绍如何通过Java远程连接Linux服务器以及操作多条Shell命令。

一、JAVA连接至Linux服务器


创建Maven项目,导入依赖jsch

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

实现远程连接,往后我们只需要调用如下两个方法即获取连接和关闭连接。连接的原理即:创建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命令集合进行操作,并且如果有返回值要进行接受。根据网上的资料,我进行了自己的代码编写。

操作原理

  1. 使用上述连接中实现的session对话创建Channel执行通道
  2. 命令集合参数传递给通道,连接通道,通道执行命令,使用IO流读命令结果
  3. 循环读取结果并且将返回值拼接为字符串,若没有返回值则标注
  4. 将拼接好的字符串保存到集合,并且返回
//用来执行命令
//Session表示传递连接对话,commands表示传递命令集合
public List<String> getCmdResult(Session session , List<String> commands){
    //用来存放命令的返回值
    List<String> 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<String> 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<String> result = ELC.getCmdResult(session, cmds);
     result.forEach((x)-> System.out.println(x));
     GLC.closeJSchSession(session);
}

执行结果如下
java程序连接linux服务器,Java,java,服务器,linux文章来源地址https://www.toymoban.com/news/detail-643767.html

到了这里,关于Java利用JSCH库远程连接Linux服务器以及操作多条Shell命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pycharm远程连接Linux服务器

    有时候,为了方便代码管理,以及更加方便的使用服务器资源,选择将编辑器与服务器远程连接是个不错的方法。 远程连接编辑器和服务器的使用场景非常广泛。以下是一些常见的使用场景: 软件开发团队:团队成员可以通过远程连接编辑器和服务器进行协作和代码编写,

    2024年02月08日
    浏览(49)
  • vscode连接远程Linux服务器

    记录一下vscode连接远程Linux服务器及免密登陆的基本操作,操作环境: 本地windows安装vscode 远程服务器存放代码和安装vscode-server vscode通过commitid和vscode-server绑定,vscode编辑通过ssh调试远程服务器代码 vscode和vscode-server在github项目如下: 1.1 下载vscode vscode官网下载 1.2 下载vsco

    2024年02月14日
    浏览(46)
  • VSCode 连接 Linux 远程服务器

    我们在跑机器学习或深度学习模型的时候通常会使用 GPU,但大多数人自己本地电脑的 GPU 不是太好甚至没有 GPU。所以我们通常会选择实验室服务器或者云服务器去跑模型,一般我们会先在本地电脑写完代码,然后使用远程连接工具,如 MobaXterm 将代码上传至 Linux 服务器。 但

    2024年02月16日
    浏览(71)
  • vscode远程连接linux服务器

    Linux服务器(或虚拟机)条件: 开启ssh服务 客户端: vscode   1.服务端  服务端需要开启ssh服务vscode才能连接,首先检验linux是否开启了ssh服务 运行命令,如果可以看到ssh正在运行,那么可以直接使用vscode进行连接,跳转到下一步骤。 如果米有开启,那我们尝试开启:  开启

    2024年02月07日
    浏览(47)
  • 【Linux】云服务器的远程连接

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、云服务器的选用与购买 1、选用云服务器而不是虚拟机的理由 2、如何挑选云服务器 3、云服务器的配置 二、使用Xshell本地连接云服务器

    2024年02月02日
    浏览(31)
  • linux-三种远程连接服务器方式

    连接方式 3种 telnet 远程登陆 ssh远程连接 VNC远程连接 测试环境 linux版本:CentOS7 目的:尝试在windows系统主机上,用Telnet远程登录到windows服务器(server) 提示:windows客户端:telnet服务需要手动启动 Windows客户端:telnet命令的使用 ( 打开设置-搜索控制面板-程序-启用或关闭windo

    2024年02月15日
    浏览(28)
  • 如何用vscode远程连接Linux服务器

    文章目录 一、下载所需插件 二、远程连接 三、更改远程服务器名称 打开商店 下载Remote - SSH 下载Remote - SSH扩展包 点击远程资源管理器 点击SSH旁边的加号  输入: ssh 用户名 @ 服务器地址 介绍 第一个是保存到当前用户 第二个是保存到所有用户   右键点击刚才创建的远程连

    2024年02月08日
    浏览(46)
  • 「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接

    转发自cpolar内网穿透的文章:【Vscode远程开发】使用SSH远程连接服务器 「内网穿透」 远程连接服务器工具有很多,比如XShell、putty等,可以通过ssh来远程连接服务器,但这用于写代码并不方便,可能需要现在本地写好代码后再将源代码传送到服务器运行、服务器上的图片也无

    2024年02月06日
    浏览(42)
  • Ubuntu安装MySQL服务器详细步骤(包括设置外网利用Navicat等工具远程连接MySQL服务器)!——一看就会,跟着做就对!

    在开始安装前,先更新一下系统。命令如下: sudo apt update sudo apt upgrade 使用APT方式安装MySQL8时,通常会安装MySQL的最新版本,且能够自动配置服务和环境变量。 sudo apt install mysql-server -y 安装完成后,MySQL会自动启动,可以使用以下命令测试MySQL安装情况 sudo service mysql status 或

    2024年02月05日
    浏览(44)
  • VSCode使用Remote SSH远程连接Linux服务器【远程开发】

    转发自CSDN远程穿透的文章:【vscode远程开发】使用SSH远程连接服务器 「内网穿透」 远程连接服务器工具有很多,比如XShell、putty等,可以通过ssh来远程连接服务器,但这用于写代码并不方便,可能需要现在本地写好代码后再将源代码传送到服务器运行、服务器上的图片也无

    2023年04月21日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包