通过Java实现bash命令过程解析
2020-05-07 04:05
1056 查看
这篇文章主要介绍了通过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>
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- 基于Java实现ssh命令登录主机执行shell命令过程解析
- 如何通过Java实现时间轴过程解析
- AES源码(java)实现过程解析
- 通过dos命令方式,运用javac、java、jar实现对Java文件的编译,运行及打包的完整过程
- 视频上传过程中自动转换为flv格式并截图生成缩略图(Java调用命令实现)
- Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中
- Java测试题 实现一个注册功能过程解析
- Java通过zxing方式实现二维码的生成与解析
- 简单操作实现Java jsp servlet文件上传过程解析
- java 实现百度地图的地址解析及在数据库的读取存储过程
- Java Volatile关键字实现原理过程解析
- Java对象布局(JOL)实现过程解析
- 通过银行转账业务体会JAVA与存储过程不同实现方式
- Java通过google map api实现地址解析的方法
- Java中的传值与传引用实现过程解析
- 通过Java读取xml文件内容过程解析
- redis发布订阅Java代码实现过程解析
- Springboot实现Java邮件任务过程解析
- java synchronized实现可见性过程解析
- 通过jsoup工具实现java解析html