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(); } } }
相关推荐
这个库名为ganymed-ssh2-build,它允许Java应用程序与远程服务器建立SSH连接,执行命令,传输文件等。 Ganymed SSH-2库是由ETH Zurich(瑞士苏黎世联邦理工学院)开发的,它的主要类包括`ch.ethz.ssh2.Connection`...
java远程访问linux服务器操作 远程执行shll脚本或者命令、上传下载文件 package com.szkingdom.kfit.bank.ccbDirectShortcut.helper; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.SCPClient; import ...
然而,在实际操作中,尤其是使用ssh2库时,可能会遇到各种各样的错误和异常情况。下面,我们将深入探讨在ssh2使用过程中可能遇到的一些典型错误,并提供相应的解决方案。 ### 错误一:Expected positional ...
总之,Java结合ganymed-ssh2-build210.jar库可以实现强大的SSH远程连接功能,使开发者能够在Java应用中安全、便捷地与Linux服务器交互,执行各种远程操作。无论是简单的命令执行还是复杂的自动化脚本,这个库都能...
SSH2 与 Linux 操作 #### 1.1 SSH2 基本概念 SSH2(Secure Shell Version 2)是一种网络协议,用于计算机之间的安全连接,以及在安全的环境中执行远程命令。它通过加密的数据通道提供了一个安全的环境。 #### 1.2...
这个例子展示了如何使用ganymed-ssh2库将本地文件上传到远程服务器。 **四、CMD命令行使用** 在Windows的CMD中,虽然没有内置的SCP命令,但可以通过PuTTY的plink命令来实现类似的功能。例如: ```cmd plink -scp ...
Java SSH2连接是一种在Java应用程序中实现Secure Shell (SSH) 协议,通过它我们可以安全地连接到远程Linux服务器,并执行各种操作,如发送命令、传输文件等。在这个场景中,我们使用的是一款名为ganymed-ssh2-build...
总的来说,Java通过`ganymed-ssh2`库与Linux服务器建立SSH连接,涉及的主要步骤包括设置公钥认证、编写连接代码以及进行远程操作。理解这些步骤对于进行Java自动化运维工作至关重要,能有效提升工作效率。希望本文...
Ganymed SSH2 是一个开源的Java库,它支持SSH2协议,可以用于实现安全地远程访问Linux服务器或其他SSH服务器。通过该库,开发者可以方便地在Java应用程序中集成SSH和SCP功能。具体来说,它可以用来: 1. **远程登录...
Ganymed是一款开源的SSH2库,它允许Java开发者通过SSH协议与远程服务器进行交互。这个库的主要功能包括安全的远程登录、文件传输、命令执行等,为自动化部署提供了便利。在“Ganymed实现自动化部署接口”这一主题中...
通过以上知识点,Java程序可以实现与Linux服务器的无缝交互,如同使用SSH客户端一样。在实际项目中,可以根据需求选择合适的SSH库,结合Java的多线程和网络编程能力,设计出高效、稳定的远程操作解决方案。
* Ganymed SSH-2:用于连接远程Linux服务器 * Commons IO:用于处理输入输出流 ```xml <groupId>ch.ethz.ganymed <artifactId>ganymed-ssh2 <version>262 <groupId>commons-io <artifactId>commons-io ...