java连接ssh执行shell脚本

Posted 做梦的人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java连接ssh执行shell脚本相关的知识,希望对你有一定的参考价值。

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

public class SSH {
	
	static Connection conn = null;
	static String hostname = "XXXiP地址2";
	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

 

以上是关于java连接ssh执行shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

python 模拟 ssh 执行远程命令

利用shell脚本执行ssh远程另一台主机执行命令并返回命令的结果集

怎么用java代码调用远程Linux上的shell脚本

本地shell脚本中ssh到远程服务器并执行命令

Jsch使用SSH协议连接到远程Shell执行脚本

利用shell脚本执行ssh远程另一台主机执行命令并返回命令的结果集