java连接ssh执行shell脚本

在liunx上写了一个shell脚本,想通过java去调用这个shell脚本,不知道怎么去调用,在网上说使用process这个进程方式,但是我执行机和我shell脚本都不在同一台电脑,老大说java中可以连接ssh,执行shell脚本,以下代码来自他们以前的项目

public class SSH {

	static Connection conn = null;
	static String hostname = "10.40.6.232";
	static String username = "root";
	static String password = "zhou123";
	static int port = 36000;

	public static void connect()
			throws IOException {
		try {
			conn = new Connection(hostname,port);
			conn.connect();
			conn.authenticateWithPassword(username, password);
		} catch (Exception e) {
			System.out.println("?????");
			System.out.println("" + e);
		}
	}

	@SuppressWarnings("resource")
	public static String execCommand(String command) throws IOException {
		connect();
		Session session = conn.openSession();
		session.execCommand(command);
		StreamGobbler stdout = new StreamGobbler(session.getStdout());
		BufferedReader br = new BufferedReader(new InputStreamReader((stdout),
				"UTF-8"));
		String line = "";
		while ((line = br.readLine()) != null) {
			System.out.println(line);
		}

		session.close();
		return line;
	}

	@SuppressWarnings("resource")
	public static ArrayList<String> execCommandd(String command)
			throws IOException {
		connect();
		Session session = conn.openSession();
		session.execCommand(command);
		ArrayList<String> array_result = new ArrayList<String>();
		StreamGobbler stdout = new StreamGobbler(session.getStdout());
		BufferedReader br = new BufferedReader(new InputStreamReader((stdout),
				"UTF-8"));
		String line;
		while ((line = br.readLine()) != null) {
			array_result.add(line);
		}
		session.close();
		return array_result;
	}

	public static void main(String[] args) {
		try {
		// System.out.println( execCommandd("uname -s -r -v"));
		System.out.println( execCommandd("pwd"));//使用的sh方式执行
		System.out.println( execCommandd("sh /script/test3.sh"));//使用的sh方式执行

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

  需要注意,在执行shell脚本时,正常这样就可以实现了

但是你会发现你在代码中这样写,会告诉你连接失败,正常写法是 sh /目录下你的shell脚本,这个也是让我纠结了很久,因为像正常的pwd命令他是可以正常执行,但是一旦是其他就不能执行,就必须要使用sh

原文地址:https://www.cnblogs.com/chongyou/p/8253565.html

时间: 2024-08-01 17:59:14

java连接ssh执行shell脚本的相关文章

java连接ssh调用shell

首先在远程服务器上编写一个测试脚本test.sh,并赋予可执行权限:chmod +x test.sh #!/bin/bash   echo 'test22'   echo $1 $1是脚本传进来的第一个参数,我们控制台打印一下这个参数 新建maven项目,添加依赖: <dependency>       <groupId>org.jvnet.hudson</groupId>       <artifactId>ganymed-ssh2</artifac

Java执行shell脚本关闭远程数据库

本实例为用Java执行shell脚本启动或关闭远程Mysql数据库,需求原因:游戏服务器合服后,为了节省内存消耗,需要关闭合服后的服务器不必要的数据库(一台服务器主机存在多个MySql数据库),以提高服务器性能,但有时需要查询历史游戏玩家信息,又需要开启数据库,为了节省运维人员的人力和时间,游戏后台就提供非运维人员都可操作开关数据库的操作. 功能实现步骤: 第一:服务器后台提供参数,发送异步请求,请求方法如下 <script type="text/javascript">

Java执行Shell脚本“No such file or directory” (win-&gt;Linux)异常的可能原因

转自:http://blog.csdn.net/zlpdaisy/article/details/6134314 用Runtime.getRuntime().exec()方法执行Linux的一个Shell脚本时,报 Cannot run program "./script/abc.sh": java.io.IOException: error=2, No such file or directory] java.io.IOException: Cannot run program &q

JAVA远程执行Shell脚本类

1.java远程执行shell脚本类 1 package com.test.common.utility; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.UnsupportedEncodingException; 6 import java.nio.charset.Charset; 7 8 import org.apache.commons.io.IOUtils; 9 import o

运维经验分享(六)-- 深究crontab不能正确执行Shell脚本的问题(二)

运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行Shell脚本的问题(一)> <运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析> <运维经验分享(五)-- 改进的java进程管

Android程序中如何执行shell脚本

在做Android应用时,经常需要执行shell脚本,以快速实现某些功能: 在Android应用程序中执行shell脚本可以省去一大堆繁琐的代码,还可以避免不必要的错误: 比如:拷贝文件夹时,可以执行shell命令中的 cp 命令达到目的:而在代码中实现拷贝文件夹时,不仅需要编写一大堆繁琐的代码,还容易陷入递归死循环的错误中: 比如:获取文件系统的读写权限,只需要执行shell脚本中一句 mount -o rw,remount / 就能轻松搞定: 比如:删除文件夹下某一个文件.或者某一类文件.或

解决命令行执行shell脚本成功,但crontab执行失败

实际生产案例 生产机房自建PPTP客户端通过拨号连接到生产机房,但是一旦客户端网络是意外断线再重新拨号 会产生IP冲突,于是写了一个脚本监控PPTP的IP是否有多个(一般冲突以后会生成2个IP) #!/bin/bash #author Liuyueming . /etc/profile #开始没有加这个环境变量 for i in {10..35} do n=`ifconfig|grep 10.13.0.${i}|wc -l` #循环取ip并计数 # echo `ifconfig|grep 10.

使用linux客户端执行shell脚本创建数据库初始化数据库中文乱码问题

定义了一个shell脚本,可以根据其他的多个sql文件创建数据库,并且使用包含初始化数据的sql文件初始化数据库. 在windows下使用linux客户端连接到linux服务器,执行shell脚本后,发现创建出的数据库有中文乱码. 确定是字符集设置问题.查看数据库,发现字符集设置如下,很多还是 latin1. mysql> show variables like 'character_set_%';+--------------------------+---------------------

centos7 开机自动执行shell脚本

centos7 开机自动执行shell脚本 90十80 关注 2018.12.23 09:37 字数 309 阅读 485评论 0喜欢 0 自己新建一个脚本,如centnet-service.sh 经过后面的几个步骤后,这个脚本在开机的时候会执行,在这个脚本里面可以写你开机的时候想执行的命令,如启动tomcat,oracle等服务 在脚本中输入启动服务的命令,如(开机启动tomcat): #!/bin/bash export JDK_HOME=/home/java/jdk1.8.0_91 exp