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命令行? ...
随机推荐
- 三星Q470c Logo界面无限掉电重启,变砖后的挽救过程
背景 三星笔记本的部分型号如:NP530 Q470等 安装win8后再次重装系统(我弄了个Ubuntu18)会导致无法进入BIOS菜单页面的问题.启动显示logo页面后,能够听到明显啪的一声(硬盘掉电 ...
- PAT Basic 1074 宇宙无敌加法器 (20 分)
地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的.而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”.每个 PAT 星人都必须熟记各位数字的进制 ...
- scrapy爬虫框架配置--settings
我们可以用一个settings.py做个简单的介绍和解析:例: ----> # -*- coding: utf-8 -*- # Scrapy settings for xigua project ...
- java中的io流总结(一)
知识点:基于抽象基类字节流(InputStream和OutputStream).字符流(Reader和Writer)的特性,处理纯文本文件,优先考虑使用字符流BufferedReader/Buffer ...
- linux下18种监测网络带宽方式
1. nload nload是一个命令行工具,让用户可以分开来监控入站流量和出站流量.它还可以绘制图表以显示入站流量和出站流量,视图比例可以调整.用起来很简单,不支持许多选项. 所以,如果你只需要快速 ...
- Lucene简单了解和使用
一,Lucene简介 1 . Lucene 是什么? Lucene 是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎, ...
- Nginx中ngx_stream_core_module和ngx_stream_proxy_module
ngx_stream_core_module模块该模块模拟基于tcp或udp的服务连接的反向代理理,即⼯工作于传输层的调度器器指令:17.1 streamSyntax: stream { ... }D ...
- 7月新的开始 - Axure学习01 - 元件库、元件交互样式设置
解释: Axure 属于原型制作里的霸道总裁 1.原型:原型模拟真实产品的功能与设计.用于在初期阶段测试产品的可行性与效果.来节省开发成本与周期. 2.线框图:在初期实现对产品的了解.实现产品的基本结 ...
- Django2.2连接MySQL问题解决
报错一: django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have ...
- django中权限控制到按钮级别
权限控制到按钮级别 : 1.思路 : 由于每个按钮都能认为是一个权限,所以每个按钮都会有一个自己的路径,这些路径都在用户登录时保存在了session ...