Java通过ssh连接到Linxu和Windos服务器远程启动Tomcat
一、Linxu服务器远程启动tomcat
1、首先确保linxu服务器上的tomcat jdk等必要软件正确安装,并且可以正常启动。
2、编写Java SSH工具类。
相关jar包:
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.53</version> <scope>provided</scope> </dependency>
工具类:
package com.framework.code.controller; import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.TimeUnit; import com.jcraft.jsch.Channel; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; public class SSHUtil { private Channel channel; private Session session = null; private int timeout = 60000; public SSHUtil(final String ipAddress, final String username, final String password) throws Exception { JSch jsch = new JSch(); this.session = jsch.getSession(username, ipAddress, 22); this.session.setPassword(password); this.session.setConfig("StrictHostKeyChecking", "no"); this.session.setTimeout(this.timeout); this.session.connect(); this.channel = this.session.openChannel("shell"); this.channel.connect(1000); } public String runShell(String cmd, String charset) throws Exception { String temp = null; InputStream instream = null; OutputStream outstream = null; try { instream = this.channel.getInputStream(); outstream = this.channel.getOutputStream(); outstream.write(cmd.getBytes()); outstream.flush(); TimeUnit.SECONDS.sleep(2); if (instream.available() > 0) { byte[] data = new byte[instream.available()]; int nLen = instream.read(data); if (nLen < 0) { throw new Exception("network error."); } temp = new String(data, 0, nLen, "UTF-8"); } } finally { outstream.close(); instream.close(); } return temp; } public void close() { this.channel.disconnect(); this.session.disconnect(); } }
测试:
public class SSHHelper { public static void main(final String[] args) throws Exception { //shutdown.sh SSHUtil sshUtil = new SSHUtil("136.16.19.82", "root", "123456"); String res = sshUtil.runShell("/usr/apache-tomcat-7.0.47/bin/startup.sh\n", "utf-8"); System.out.println(res); sshUtil.close(); } }
一定要注意的是 命令结尾一定要加\n [\n代表命令行里敲回车]
例如启动tomcat 可以写成绝对路径
/usr/apache-tomcat-7.0.47/bin/startup.sh\n
还可以写成这样
cd /usr/apache-tomcat-7.0.47/bin/\n./startup.sh\n
相当于在命令行里先 cd /usr/apache-tomcat-7.0.47/bin 回车进入到tomcat的bin目录。
然后在通过./startup.sh启动tomcat 这里的\n就相当于回车了。
二、Windows服务器远程启动tomcat
1、首先下载ssh服务器段软件 http://www.freesshd.com/?ctt=download 我用的是freeSSHd.exe
2、安装软件,前面几部略过,这一步提示是否生成秘钥,选择是。
3、这一步提示是否设置为系统服务,这里随便。
4、打开软件进行设置,如果有绿色的已经开启的服务,先都把他们关闭了。
5、创建用户,设置密码。
6、配置SSH链接。
7、启动SSH服务。
8、用上面的Java客户端代码即可发送脚本到服务器上执行了。
如果提示链接密码错误链接不上,就从安装路径打开软件并重启服务。D:\Program\freeSSHd\FreeSSHDService.exe
多试几次就好了,不知道是不是软件的BUG。
public static void main(final String[] args) throws Exception { //shutdown.sh SSHUtil sshUtil = new SSHUtil("121.92.115.217", "root", "vstar123"); //String res = sshUtil.runShell("cd /usr/apache-tomcat-7.0.47/bin/\n./startup.sh\n", "utf-8"); String res = sshUtil.runShell("D:\\apache-tomcat-7.0.35\\bin\\startup.bat \n", "utf-8"); //String res = sshUtil.runShell("echo %CATALINA_HOME% \n", "utf-8"); System.out.println(res); sshUtil.close(); }
如果提示缺少tomcat环境变量,则需要在服务器上配置tomcat的环境变量。
CATALINA_HOME = D:\Java\Software\apache-tomcat-7.0.47 配置到这种路径即可,然后需要重启服务器让环境变量生效,不然读不到。
D:\Program\freeSSHd>D:\Java\Software\apache-tomcat-7.0.47\bin\startup.bat The CATALINA_HOME environment variable is not defined correctly This environment variable is needed to run this program
相关文章
- [Java基础] java的守护线程与非守护线程
- Jmeter里的全能java测试sampler - Java request
- ssh(Spring+Spring mvc+hibernate)——DeptController.java
- Java实现 LeetCode 404 左叶子之和
- Java实现微生物增殖
- java实现第五届蓝桥杯李白打酒
- Java实现字符串编辑距离
- Java实现 蓝桥杯VIP 算法训练 黑白无常
- Java实现 蓝桥杯 历届试题 小数第n位
- Java实现 蓝桥杯 算法提高VIP 摆花 dp 记忆搜索 2种做法 多重背包
- (转载)java多态(2)-------Java转型(向上或向下转型)
- python paramiko ssh.exec_command()启动tomcat服务器应用进程失败问题解决方法- Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to run this progr
- Java基础知识点汇总 四 泛型
- Java知识回顾 (1) 编译环境与基本变量类型
- Java项目部署目录结构与部署方法 打包方法attilax总结 目录 1.1. Java web项目部署目录结构1 2. Springboot项目的部署结构2 3. Java项目的开发模式下目录
- Simple Logging Facade for Java (SLF4J)作用(java日志框架)
- 【java】Java 包(package)
- 【 华为OD机试 2023】 日志限流(C++ Java JavaScript Python)
- 【 华为OD机试 2023】 微服务的集成测试(C++ Java JavaScript Python)
- 详解jvm之java类加载机制和类加载器(ClassLoader) 深入理解Java类加载器(ClassLoader) 如何自定义类加载器 深入说明双亲委派 双亲委派模型的破坏者-线程上下文类加载器
- Java-小技巧-002-String 转 long,进制转换
- Java学习 | 如何扩展加载Jar包?
- Java Instrumentation 内存马——主要是利用Instrumentation Java API来做内存注入,会用到反射机制,文中提到检测思路:注入jar包-> dump已加载class字节码->反编译成java代码-> 源码webshell检测
- 【java】Java并发编程系列-基础知识(非常详细哦)
- 【Java】反射