`
落叶换新叶
  • 浏览: 25560 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

ethz.ssh2 本地操作linux服务器

阅读更多

 1.调用代码

  

import ch.ethz.ssh2.*;
import java.io.*;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;

public class RemotShellTool {
    public static void main(String[] args) throws Exception {
        // 上传文件
        RemotShellTool.updateFile();
        // 修改文件权限
        RemotShellTool.chmodFile();
        // 打包
       RemotShellTool.pack("D:\\dev\\workspace\\taiping-dianshang-core-release2");
        // 运行项目
       RemotShellTool.execCommond();
    }

    // 打包
    public static void pack(String path) {
        try {
            Process process = Runtime.getRuntime().exec("cmd /c  mvn install -Dmaven.test.skip=true ");

            new Thread(new ThreadStream(process.getErrorStream())).start();
            new Thread(new ThreadStream(process.getInputStream())).start();

            process.waitFor();
            process.destroy();
            process.getOutputStream().close();
            process.getErrorStream().close();
            process.getInputStream().close();

        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 执行命令
    public static void execCommond() throws Exception {
        String fileName = "taiping-jinfu-task-20191009102720.jar";
        String port = "8888";
        Connection connection = new Connection("ip");
        connection.connect();//连接
        connection.authenticateWithPassword("username","password");//认证
        Session session=connection.openSession();
        session.execCommand("cd /home/loginuser && sh test.sh "+fileName+" "+port);
        InputStream is = new StreamGobbler(session.getStdout());//获得标准输出流
        BufferedReader brs = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        String temp = "";
        while ((temp=brs.readLine()) != null) {
            System.out.println(temp);
        }
        InputStream errStream = new StreamGobbler(session.getStderr());
        BufferedReader errReader = new BufferedReader(new InputStreamReader(errStream,Charset.forName("UTF-8")));
        String errTemp = "";
        while((errTemp=errReader.readLine()) !=null) {
            int i=1;
            System.out.println(errTemp);
        }

      //  new Thread(new ThreadStream(session.getStdout())).start();
        if (session != null) {
            session.close();
        }
        session.close();
        brs.close();
       // errReader.close();
        connection.close();
    }
    // 修改文件权限
    public static void chmodFile() throws Exception {
        String fileName = "taiping-jinfu-task-20191009102720.jar";
        Connection connection = new Connection("ip");
        connection.connect();//连接
        connection.authenticateWithPassword("username","password");//认证
        Session session=connection.openSession();
        session.execCommand("chmod 664 /home/loginuser/"+fileName);

        if (session != null) {
            session.close();
        }
        session.close();
    }

   public static void updateFile() throws Exception{
        Connection connection = new Connection("ip");
        connection.connect();//连接
        connection.authenticateWithPassword("username","password");//认证

        SCPClient scpClient = connection.createSCPClient();
        String localFilePath = "D:\\tpdata\\upload\\taiping-jinfu-task-0.0.1-SNAPSHOT.jar";
        File localFile = new File(localFilePath);

        String remoteFilePath = "/home/loginuser/";
        String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        String remoteFileName = "taiping-jinfu-task-"+timeStamp+".jar";
        SCPOutputStream os= scpClient.put(remoteFileName,localFile.length(),remoteFilePath,"0222");

        byte[] b = new byte[4096];
        FileInputStream fis = new FileInputStream(localFile);
        int i;
        while ((i = fis.read(b)) != -1) {
            os.write(b, 0, i);
        }
        os.flush();
        fis.close();
        os.close();

    }
}

 

 

2.引用maven,版本使用262的,使用较低的版本,api会不一样

 

<dependency>
            <groupId>ch.ethz.ganymed</groupId>
            <artifactId>ganymed-ssh2</artifactId>
            <version>262</version>
</dependency>

 

 3.test.sh脚本

 #!/bin/bash
export JAVA_HOME=/home/loginuser/jdk
export JRE_HOME=/home/loginuser/jdk/jre
export PATH=/usr/local/bin:/usr/local/lib:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib

PID=$(netstat -anp|grep $2|awk '{printf $7;exit;}'|cut -d/ -f1)
echo 'PID:'$PID
if [$PID = ""];
then
  echo '没有端口占用'
else
  echo 'kill 占用端口'
  kill -9 $PID
fi
nohup java -jar $1 -Dserver.port=$2 > nohup.out
tail -200f  nohup.out

 

 4.操作日志线程类

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ThreadStream implements  Runnable {

    private InputStream inputStream;

    public ThreadStream(InputStream inputStream) {
        this.inputStream=inputStream;
    }
    @Override
    public void run() {

        try {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"GBK"));
            String s = "";
            while((s = bufferedReader.readLine())!=null) {
                System.out.println("输出结果:"+s);
            }
            bufferedReader.close();

            System.out.println("输出结果:"+s);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

 

 

 

 

2
0
分享到:
评论

相关推荐

    ssh协议依赖jar包:ganymed-ssh2-build

    这个库名为ganymed-ssh2-build,它允许Java应用程序与远程服务器建立SSH连接,执行命令,传输文件等。 Ganymed SSH-2库是由ETH Zurich(瑞士苏黎世联邦理工学院)开发的,它的主要类包括`ch.ethz.ssh2.Connection`...

    ganymed-ssh2-build210.jar java远程访问linux服务器操作、上传下载文件

    java远程访问linux服务器操作 远程执行shll脚本或者命令、上传下载文件 package com.szkingdom.kfit.bank.ccbDirectShortcut.helper; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.SCPClient; import ...

    精心整理的ssh2 一些错误问题的记录(推荐)

    然而,在实际操作中,尤其是使用ssh2库时,可能会遇到各种各样的错误和异常情况。下面,我们将深入探讨在ssh2使用过程中可能遇到的一些典型错误,并提供相应的解决方案。 ### 错误一:Expected positional ...

    Java(通过ganymed-ssh2-build210.jar)实现SSH远程连接linux终端

    总之,Java结合ganymed-ssh2-build210.jar库可以实现强大的SSH远程连接功能,使开发者能够在Java应用中安全、便捷地与Linux服务器交互,执行各种远程操作。无论是简单的命令执行还是复杂的自动化脚本,这个库都能...

    ssh2向linux发送操作命令,ftp下载linux文件到本地

    SSH2 与 Linux 操作 #### 1.1 SSH2 基本概念 SSH2(Secure Shell Version 2)是一种网络协议,用于计算机之间的安全连接,以及在安全的环境中执行远程命令。它通过加密的数据通道提供了一个安全的环境。 #### 1.2...

    scp操作大全

    这个例子展示了如何使用ganymed-ssh2库将本地文件上传到远程服务器。 **四、CMD命令行使用** 在Windows的CMD中,虽然没有内置的SCP命令,但可以通过PuTTY的plink命令来实现类似的功能。例如: ```cmd plink -scp ...

    java shh2连接

    Java SSH2连接是一种在Java应用程序中实现Secure Shell (SSH) 协议,通过它我们可以安全地连接到远程Linux服务器,并执行各种操作,如发送命令、传输文件等。在这个场景中,我们使用的是一款名为ganymed-ssh2-build...

    Java连接Linux服务器过程分析(附代码)

    总的来说,Java通过`ganymed-ssh2`库与Linux服务器建立SSH连接,涉及的主要步骤包括设置公钥认证、编写连接代码以及进行远程操作。理解这些步骤对于进行Java自动化运维工作至关重要,能有效提升工作效率。希望本文...

    java应用程序远程登录linux并执行其命令

    Ganymed SSH2 是一个开源的Java库,它支持SSH2协议,可以用于实现安全地远程访问Linux服务器或其他SSH服务器。通过该库,开发者可以方便地在Java应用程序中集成SSH和SCP功能。具体来说,它可以用来: 1. **远程登录...

    Ganymed实现自动化部署接口

    Ganymed是一款开源的SSH2库,它允许Java开发者通过SSH协议与远程服务器进行交互。这个库的主要功能包括安全的远程登录、文件传输、命令执行等,为自动化部署提供了便利。在“Ganymed实现自动化部署接口”这一主题中...

    java连接linux

    通过以上知识点,Java程序可以实现与Linux服务器的无缝交互,如同使用SSH客户端一样。在实际项目中,可以根据需求选择合适的SSH库,结合Java的多线程和网络编程能力,设计出高效、稳定的远程操作解决方案。

    Java远程调用Shell脚本并获取输出信息【推荐】

    * Ganymed SSH-2:用于连接远程Linux服务器 * Commons IO:用于处理输入输出流 ```xml &lt;groupId&gt;ch.ethz.ganymed &lt;artifactId&gt;ganymed-ssh2 &lt;version&gt;262 &lt;groupId&gt;commons-io &lt;artifactId&gt;commons-io ...

Global site tag (gtag.js) - Google Analytics