Java 实现 bash命令
Java 实现 bash命令
1、BASH 命令简介
2、Java实现 BASH命令执行Shell脚本
1)代码实现如下:
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List; public class BashUtil { private Logger logger = LoggerFactory.getLogger(BashUtil.class); private String hostname; private String username; private String password; private int port; private Connection conn; private BashUtil() {
} public BashUtil(String hostname, String username, String password) {
this(hostname, username, password, 22);
} public BashUtil(String hostname, String username, String password, Integer port) {
this.hostname = hostname;
this.username = username;
this.password = password;
if (port == null) {
port = 22;
} else {
this.port = port;
}
} /**
* 创建连接并认证
* @return
*/
public Boolean connection() {
try {
conn = new Connection(hostname, port);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
return isAuthenticated;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} /**
* 关闭连接
*/
public void close() {
try {
conn.close();
conn = null;
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 执行shell命令
* @param command
* @return
*/
public List<String> command(String command) {
if (conn == null && !connection()) {
logger.error("Authentication failed.");
return null;
}
List<String> result = new ArrayList<String>();
try {
Session sess = conn.openSession();
sess.execCommand(command);
InputStream stdout = new StreamGobbler(sess.getStdout());
InputStream stderr = new StreamGobbler(sess.getStderr());
BufferedReader br_out = new BufferedReader(new InputStreamReader(stdout, "utf-8"));
BufferedReader br_err = new BufferedReader(new InputStreamReader(stderr, "utf-8"));
StringBuffer sb_err = new StringBuffer();
String line = null;
while ((line = br_out.readLine()) != null) {
result.add(line.trim());
}
while ((line = br_err.readLine()) != null) {
sb_err.append(line + "\n");
}
if (isNotEmpty(sb_err.toString())) {
logger.error(sb_err.toString());
return null;
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} private static boolean isEmpty(String content) {
if (content == null) {
return true;
} else {
return "".equals(content.trim()) || "null".equalsIgnoreCase(content.trim());
}
} private static boolean isNotEmpty(String content) {
return !isEmpty(content);
} public static void main(String[] args){
String hostname = "192.168.123.234"; // 此处根据实际情况,换成自己需要访问的主机IP
String userName = "root";
String password = "password";
Integer port = 22;
String command = "cd /home/miracle&&pwd&&ls&&cat luna.txt"; BashUtil bashUtil = new BashUtil(hostname, userName, password, port);
List<String> resultList = bashUtil.command(command);
StringBuffer result = new StringBuffer("");
resultList.forEach(str -> result.append(str + "\n")); System.out.println("执行的结果如下: \n" + result.toString());
}
}
2)执行结果如下:
执行的结果如下:
/home/miracle
luna.txt
Hello, I'm SshUtil.
Nice to meet you.^_^
3)pom.xml引用依赖包如下:
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency> <!-- ssh -->
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>262</version>
</dependency>
PS:
Maven依赖jar包问题,请参考如下博文:
https://www.cnblogs.com/miracle-luna/p/11863679.html
Java 实现 bash命令
https://www.cnblogs.com/miracle-luna/p/12050728.html
Java 实现 ssh命令 登录主机执行shell命令
https://www.cnblogs.com/miracle-luna/p/12050367.html
Java 实现 telnet命令 验证主机端口的连通性
https://www.cnblogs.com/miracle-luna/p/12049658.html
Java 检查IPv6地址的合法性
https://www.cnblogs.com/miracle-luna/p/12041780.html
Java 实现判断 主机是否能 ping 通
https://www.cnblogs.com/miracle-luna/p/12026797.html
Java 实现 bash命令的更多相关文章
- Java 实现 ssh命令 登录主机执行shell命令
Java 实现 ssh命令 登录主机执行shell命令 1.SSH命令 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SS ...
- Java 实现 telnet命令 验证主机端口的连通性
Java 实现 telnet命令 验证主机端口的连通性 1.Telnet 命令 Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式.它为用户提供了在本地计 ...
- java 调用bash shell脚本阻塞的小问题的解决
java 调用bash shell脚本阻塞的小问题的解决 背景 使用java实现的web端,web端相应用户的界面操作,使用java调用bash实现的shell脚本进行实际的操作,操作完成返回执行结 ...
- Linux常用bash命令
目录 bash命令 基础操作 export | whereis | which | clear 文件操作 ls | touch | cat | more | head | tail | mv | cp ...
- Linux Bash命令总结
Bash命令 一:man命令,是manual 手册的意思,如man ps表示查看ps命令的手册,man man查看man命令的手册:也可以通过man xx查看是否有xx命令. 二:cat命令,用来一次 ...
- java运行Linux命令
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UT ...
- java 执行shell命令遇到的坑
正常来说java调用shell命令就是用 String[] cmdAry = new String[]{"/bin/bash","-c",cmd} Runtim ...
- java与javac命令的功用
一.javac用来编译java程序,比如说我写了一个Server.java文件,首先通过命令行进入.java文件所在的路径, 然后通过输入 javac Server.java 命令行来完成编译,编译之 ...
- Windows 10预览版14316开启Bash命令支持
00x0 前言 4月7日凌晨,微软推送了最新的Windows 10一周年更新预览版14316,其中重要的是原生支持Linux Bash命令行支持. 00x1 问题 如何开启Linux Bash命令行? ...
随机推荐
- 5.Hbase API 操作开发
Hbase API 操作开发需要连接Zookeeper进行节点的管理控制 1.配置 HBaseConfiguration: 包:org.apache.hadoop.hbase.HBaseConfigu ...
- jmeter——参数化、关联、断言
1.jmeter——参数化 三种方式: ${变量名} 1.1用户定义的变量 比如注册,登录都得用到手机号码,那就把手机号码自定义为变量 1)添加一个线程组--注册.登录HTTP请求--察看结果树--用 ...
- idou老师教你学Istio06: 如何用istio实现流量迁移
流量迁移是流量管理的一个重要功能.istio提供的流量管理功能将流量从基础设施扩展中解耦,支持动态请求路由,故障注入.超时重试.熔断和流量迁移等.流量迁移的主要目的是将流量从微服务的某一版本的逐步迁移 ...
- 使用IDEA快速搭建基于Maven的SpringBoot项目(集成使用Redis)
迫于好久没写博客心慌慌,随便写个简单版的笔记便于查阅. 新建项目 新建项目 然后起名 继续next netx finish. 首先附上demo的项目结构图 配置pom.xml <?xml ver ...
- nginx添加模块记录
查看现有nginx的编译参数: [root@iZbp1d0dkjhfmxnxp7wuhmZ nginx-1.12.2]# nginx -Vnginx version: nginx/1.12.2buil ...
- .NET界面开发新体验!DevExpress v19.2.4全新来袭
DevExpress Universal Subscription(又名DevExpress宇宙版或DXperience Universal Suite)是全球使用广泛的.NET用户界面控件套包,De ...
- BZOJ 5495: [2019省队联测]异或粽子 (trie树)
这题果然是原题[BZOJ 3689 异或之].看了BZOJ原题题解,发现自己sb了,直接每个位置维护一个值保存找到了以这个位置为右端点的第几大,初始全部都是1,把每个位置作为右端点能够异或出来的最大值 ...
- [Google Guava] 4-函数式编程
原文链接 译文链接 译者:沈义扬,校对:丁一 注意事项 截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果.预计JDK8中会有所改变,但Guava现在就想给JDK5以上用户提 ...
- P2587 [ZJOI2008]泡泡堂 神仙贪心
思路:贪心 提交:1次(看了题解$QwQ$) 题解: 若我方最弱可以干掉对方最弱,则干: 否则若我方最强可以干掉对方最强,则干: 否则若我方最弱与对方最强平手,则平: 其实貌似一二条是可以互换的,主要 ...
- 014_STM32程序移植之_L298N电机驱动模块
更改注意: STM32程序移植之L298N电机驱动模块 引脚连接图 STM32引脚 L298N引脚 功能 PA6 ENA 马达A的PWM PA7 ENB 马达B的PWM PA2 IN1 控制马达A P ...