# 本地调用
使用JDK自带的RunTime类和Process类实现

public static void main(String[] args){
Process proc = RunTime.getRunTime().exec("cd /home/winnie; ls;") // 标准输入流(必须写在 waitFor 之前)
String inStr = consumeInputStream(proc.getInputStream());
// 标准错误流(必须写在 waitFor 之前)
String errStr = consumeInputStream(proc.getErrorStream()); int retCode = proc.waitFor();
if(retCode == 0){
System.out.println("程序正常执行结束");
}
} /**
* 消费inputstream,并返回
*/
public static String consumeInputStream(InputStream is){
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s ;
StringBuilder sb = new StringBuilder();
while((s=br.readLine())!=null){
System.out.println(s);
sb.append(s);
}
return sb.toString();
}

# 远程调用(一)
导入ganymed-ssh2包

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session; public static void main(String[] args){
String host = "210.38.162.181";
int port = 22;
String username = "root";
String password = "root";
// 创建连接
Connection conn = new Connection(host, port);
// 启动连接
conn.connection();
// 验证用户密码
conn.authenticateWithPassword(username, password);
Session session = conn.openSession();
session.execCommand("cd /home/winnie; ls;"); // 消费所有输入流
String inStr = consumeInputStream(session.getStdout());
String errStr = consumeInputStream(session.getStderr()); session.close;
conn.close();
} /**
* 消费inputstream,并返回
*/
public static String consumeInputStream(InputStream is){
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s ;
StringBuilder sb = new StringBuilder();
while((s=br.readLine())!=null){
System.out.println(s);
sb.append(s);
}
return sb.toString();
}

# 远程调用(二)
使用jsch实现

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session; public static void main(String[] args){
String host = "210.38.162.181";
int port = 22;
String username = "root";
String password = "root";
// 创建JSch
JSch jSch = new JSch();
// 获取session
Session session = jSch.getSession(username, host, port);
session.setPassword(password);
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setProperties(prop);
// 启动连接
session.connect();
ChannelExec exec = (ChannelExec)session.openChannel("exec");
exec.setCommand("cd /home/winnie; ls;");
exec.setInputStream(null);
exec.setErrStream(System.err);
exec.connect(); // 消费所有输入流,必须在exec之后
String inStr = consumeInputStream(exec.getInputStream());
String errStr = consumeInputStream(exec.getErrStream()); exec.disconnect();
session.disconnect();
} /**
* 消费inputstream,并返回
*/
public static String consumeInputStream(InputStream is){
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s ;
StringBuilder sb = new StringBuilder();
while((s=br.readLine())!=null){
System.out.println(s);
sb.append(s);
}
return sb.toString();
}

java连接linux的三种方式(附执行命令)的更多相关文章

  1. PHP的学习--连接MySQL的三种方式

    记录一下PHP连接MySQL的三种方式. 先mock一下数据,可以执行一下sql. /*创建数据库*/ CREATE DATABASE IF NOT EXISTS `test`; /*选择数据库*/ ...

  2. JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取

    创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...

  3. java 获取时间戳的三种方式

      java 获取时间戳的三种方式 CreationTime--2018年7月13日16点29分 Author:Marydon 1.实现方式 方式一:推荐使用 System.currentTimeMi ...

  4. 如何实现有返回值的多线程 JAVA多线程实现的三种方式

    可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口.执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable ...

  5. Java实现线程的三种方式和区别

    Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...

  6. JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取

    创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...

  7. [OpenSource]浅谈.Net和Java互相调用的三种方式

    在很多的大型系统开发中,开发工具往往不限制于同一种开发语言,而是会使用多种开发语言的混合型开发.目前Java和.Net都声称自己占85%的市场份额,不管谁对谁错,Java和.Net是目前应用开发的两个 ...

  8. 浅谈.Net和Java互相调用的三种方式

    在很多的大型系统开发中,开发工具往往不限制于同一种开发语言,而是会使用多种开发语言的混合型开发.目前Java和.Net都声称自己占85%的市场份 额,不管谁对谁错,Java和.Net是目前应用开发的两 ...

  9. Java并发编程:Java创建线程的三种方式

    目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...

随机推荐

  1. sql: TRIGGER

    --Common Table Expressions(CTE) WITH HighSample (SampleId,SampleTitle,SampleContent) AS ( SELECT Sam ...

  2. CentOS 编译 openjdk

    1. 概述 <<深入理解Java虚拟机--JVM高级特性与最佳实践>>第一章就谈到自己编译jdk,来吧. 2.  编译环境 VMware12 CentOS-7-x86_64-E ...

  3. Java从入门到精通——数据库篇Mongo DB GridFS文件系统

    一.概述    GridFS是MongoDB的一种存储机制,用来存储大型二进制文件. 优点: 1.使用GridFS能够简化你的栈.如果已经在使用MongoDB,那么可以使用GridFS来代替独立的文件 ...

  4. 【Anaconda】windows安装报错:UnicodeDecodeError解决方法

    UnicodeDecodeError: 'utf8' codec can't decode byte 0xce in position 11: invalid continuation byte 解决 ...

  5. 【Web crawler】print_all_links

    How to repeat Procedures&Control CS重要概念 1.1 过程procedures 封装代码,代码重用 1.2 控制Control DEMO # -*- codi ...

  6. FPGA学习系列 各种门器件程序积累

    1. 两输入与(and)门 entity and2gate is Port ( x : in STD_LOGIC; y : in STD_LOGIC; z : out STD_LOGIC);end a ...

  7. GitHub教程(二) 删除已有仓库

    通过GitHub教程(一)的阅读,我相信您对GitHub体系框架已经有了模模糊糊的了解.本节教程将继续介绍GitHub的操作---删除仓库. 作为GitHub的入门使用者,我们可能会建一些简单的仓库来 ...

  8. Linux->Ubuntu配置tomcat开机自动启动

    Ubuntu配置tomcat开机自动启动 我们有时候会有这样一个需求: 在开机的时候就启动一个服务,比如tomcat. 我们可以这样做: 将tomcat目录下/bin中的catalina.sh拷贝到/ ...

  9. 初级游戏外挂编程详解 windows运行原理+游戏辅助编程 游戏外挂编程

    详解游戏辅助编程 [目录] 1-什么是Windows API 2-Windows进程 3-Windows 的内存的运行原理 4-windows 中句柄的概念 5-Windows的变量类型 6-辅助实现 ...

  10. [EffectiveC++]item39:明智而审慎地使用private

    187页 private继承意味implementedin-terms-of(根据某物实现出).如果你让class D以private形式继承class B,你的用意为了采用class B内已经备妥的 ...