- 浏览: 2141130 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
在我们的项目中,大部分环境的服务器用的都是Linux,从而使用JAVA与Linux shell通讯,就成了一项很常见的事情。
Ganymed SSH是一个Java实现SSH的项目
Java 实现SSH协议的项目有很多,如JFTP,trilead SSH,JSCH,ganymed SSH等
下面我们主要说的是关于ganymed SSH的一些小使用。
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个项目。可以通过它直接在Java程序中连接SSH服务器,实现基于SSH协议的服务访问。 如远程命令执行和shell访问,本地和远程端口转发,本地数据流转发,X11转发,SCP,SFTP等功能。
散仙测试的demo如下:
输出的内容如下所示:
能够在在应用程序中,执行shell脚本是非常有用的,我们可以自己写一个shell脚本,把多个shell命令,封装起来,然后执行一次shell即可。
Ganymed SSH是一个Java实现SSH的项目
Java 实现SSH协议的项目有很多,如JFTP,trilead SSH,JSCH,ganymed SSH等
下面我们主要说的是关于ganymed SSH的一些小使用。
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个项目。可以通过它直接在Java程序中连接SSH服务器,实现基于SSH协议的服务访问。 如远程命令执行和shell访问,本地和远程端口转发,本地数据流转发,X11转发,SCP,SFTP等功能。
散仙测试的demo如下:
package com.qin.shell; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.mortbay.log.Log; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; public class ExecShell{ private String IP;//要远程登录的IP地址 private String username;//用户名 private String password;//密码 public ExecShell(String IP, String username,String password){ this.IP=IP; this.username=username; this.password=password; } //命令执行 public boolean exec( String command ) throws InterruptedException{ Log.info("command: "+command); boolean rtn = false; try { Connection conn = new Connection(IP); conn.connect(); boolean isAuthenticated = conn.authenticateWithPassword(username, password); if (isAuthenticated == false){ throw new IOException("Authentication failed."); } Session sess = conn.openSession(); sess.execCommand(command); InputStream stdout = new StreamGobbler(sess.getStdout()); BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); InputStream stderr = new StreamGobbler(sess.getStderr()); BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr)); String line = null; while ( (line = br.readLine())!=null ) { Log.info("GanyMedUtil out> "+line); } while (true) { line = stderrReader.readLine(); if (line == null) break; Log.info("GanyMedUtil out> "+line); } /* Show exit status, if available (otherwise "null") */ Log.info("ExitCode: " + sess.getExitStatus()+" "+IP+":"+command); sess.close(); conn.close(); rtn = new Integer(0).equals(sess.getExitStatus()); return rtn; } catch (IOException e) { Log.warn("Error ......................",e); e.printStackTrace(); System.exit(2); return rtn; } } public static void main(String[] args) throws InterruptedException { ExecShell es = new ExecShell("192.168.75.130","root","dongliang"); System.out.println("==========================================单个命令测试执行=========================================="); es.exec("ls");//执行单行命令 System.out.println("==========================================多个命令测试执行=========================================="); es.exec("cd /root/apache-nutch-1.8/ && ls && date");//多个命令之间使用&&隔开 //ganyMedUtil.execMoreShellCommand(""); //ganyMedUtil.exec("ls"); } }
输出的内容如下所示:
2014-05-28 15:27:19.076:INFO::Logging to STDERR via org.mortbay.log.StdErrLog 2014-05-28 15:27:19.076:INFO::command: ls 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> 2 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> abc.txt 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> anaconda-ks.cfg 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> apache-ant-1.9.2 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> apache-ant-1.9.2-bin.tar.gz 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> apache-nutch-1.8 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> apache-nutch-1.8-src.zip 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> a.sh 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> bb.sh 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> b.sh 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> case.sh 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> cip.sh 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> c.sh 2014-05-28 15:27:19.454:INFO::GanyMedUtil out> date 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> d.sh 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> e.sh 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> f.sh 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia_20140327155418.zip 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-3.1.7-3.el6.rf.x86_64.rpm 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-devel-3.1.7-3.el6.rf.x86_64.rpm 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-gmetad-3.1.7-3.el6.rf.x86_64.rpm 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-gmond-3.1.7-3.el6.rf.x86_64.rpm 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-gmond-python-3.1.7-3.el6.rf.x86_64.rpm 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-web-3.1.7-3.el6.rf.x86_64.rpm 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> gg.sh 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> hadoop1.2 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> hadoop-1.2.0.tar.gz 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> installganglia.sh 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> install.log 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> install.log.syslog 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> jdk1.7 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> jdk-7u51-linux-x64.tar.gz 2014-05-28 15:27:19.455:INFO::GanyMedUtil out> jmxtrans-20121016.145842.6a28c97fbb-0.noarch.rpm 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> libconfuse-2.7-6.2.x86_64.rpm 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> libevent-2.0.21-stable 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> libevent-2.0.21-stable.tar.gz 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> memcached-1.4.15 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> memcached-1.4.15.tar.gz 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> my.sh 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> pp 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> solr-4.3.1.tgz 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> test.jar 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> test.py 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> zookeeper 2014-05-28 15:27:19.456:INFO::GanyMedUtil out> zookeeper.zip 2014-05-28 15:27:19.456:INFO::ExitCode: 0 192.168.75.130:ls ==========================================多个命令测试执行========================================== 2014-05-28 15:27:19.458:INFO::command: cd /root/apache-nutch-1.8/ && ls && date 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> bb.sh 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> build 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> build.xml 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> CHANGES.txt 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> conf 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> default.properties 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> docs 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> ivy 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> lib 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> LICENSE.txt 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> NOTICE.txt 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> README.txt 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> runtime 2014-05-28 15:27:19.789:INFO::GanyMedUtil out> src 2014-05-28 15:27:19.790:INFO::GanyMedUtil out> 2014年 05月 28日 星期三 23:27:19 CST 2014-05-28 15:27:19.790:INFO::ExitCode: 0 192.168.75.130:cd /root/apache-nutch-1.8/ && ls && date
能够在在应用程序中,执行shell脚本是非常有用的,我们可以自己写一个shell脚本,把多个shell命令,封装起来,然后执行一次shell即可。
- ganymedssh.zip (381.8 KB)
- 下载次数: 79
发表评论
-
记一次log4j不打印日志的踩坑记
2019-09-22 01:58 1446### 起因 前几天一个跑有java应用的生产集群(200多 ... -
在Java里面如何解决进退两难的jar包冲突问题?
2019-07-23 19:10 1137如上图所示: es api组件依赖guava18.0 ... -
什么是操作系统的虚拟内存?
2019-07-17 10:04 681https://mp.weixin.qq.com/s?__bi ... -
如何轻松理解二叉树的深度遍历策略
2019-07-03 23:33 1007我们知道普通的线性数据结构如链表,数组等,遍历方式单一 ... -
为什么单线程Redis性能也很出色
2019-01-21 18:02 2127高性能的服务器,不一 ... -
如何将编程语言里面的字符串转成数字?
2019-01-11 23:23 1983将字符串转成数字在很 ... -
为什么Java里面String类是不可变的
2019-01-06 18:36 1579在Java里面String类型是不可变对象,这一点毫无疑问,那 ... -
关于Java里面volatile关键字的重排序
2019-01-04 18:49 978Java里面volatile关键字主 ... -
关于Linux进程的基础知识
2018-12-17 15:58 1183### 前言 在计算机里面,一个进程通常指的是一个运行程序的 ... -
多个线程如何轮流打印ABC特定的次数?
2018-12-11 20:42 5924之前的一篇文章,我给 ... -
聊聊Java里面的引用传递
2018-11-16 21:21 925长久以来,在Java语言里面一直有一个争论,就是Java语言到 ... -
理解计数排序算法的原理和实现
2018-10-11 10:03 2044计数排序(Counting sort) ... -
理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
2018-09-06 11:31 3329### 前言 理解HashMap和Con ... -
关于Java里面多线程同步的一些知识
2018-07-18 09:45 1058# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
Java单例模式之双检锁深入思考
2018-07-08 12:25 3237# Java单例模式之双检锁 ... -
关于Java里面多线程同步的一些知识
2018-07-08 12:23 1078# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
重新认识同步与异步,阻塞和非阻塞的概念
2018-07-06 14:30 1421# 重新认识同步与异步 ... -
线程的基本知识总结
2018-06-27 16:27 1016### (一)创建线程的方式 (1)实现Runnable接口 ... -
Java里面volatile关键字修饰引用变量的陷阱
2018-06-25 11:42 1323# Java里面volatile关键字修饰引用变量的陷阱 如 ... -
关于Java里面的字符串拼接,你了解多少?
2018-06-25 11:28 1309# 关于Java里面的字符串 ...
相关推荐
java连接linux,执行shell命令的工具类 sshxcute.jar
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
java执行shell或bat脚本,Java可以使用三种方式来执行.bat或.shell脚本文件:使用Runtime.exec()、使用ProcessBuilder、使用第三方工具包commonsexec.jar
java操作linux工具包
该工具包可实现远程调用Shell脚本,可帮助您轻松实现java远程调用Shell脚本
使用注意: 1. WebLogic反弹需要等5秒左右 2. 该工具为对外测试版,请尽量按照正常思路来用,比如... 体积更小,不再依赖java环境,但程序采用.net编写,需要.net 4.0环境 待完成: weblogic回显结果测试中,稍后加入
NULL 博文链接:https://killeraction.iteye.com/blog/1022141
##AdbShellCommand在Android项目中执行adb Shell命令,通过java代码调用执行,本程序采用MVP架构。###Java中执行adb shell命令本项目中,adb shell命令执行的实现方法主要参考网文()。文章中,把执行代码集成在...
使用注意: 1. WebLogic反弹需要等5秒左右 2. 该工具为对外测试版,请尽量按照正常思路来用,...5. 体积更小,不再依赖java环境,但程序采用.net编写,需要.net 4.0环境 待完成: weblogic回显结果测试中,稍后加入
本人根据实际项目需求所开发的,SSH2远程执行Linux中Shell脚本Java小工具,亲测有效!里赋有已打好的程序jar包及工具使用说明,简单易用,很方便哟!
java程序通用的产品包模板,启停脚本可以同时兼容普通java工程和springboot工程,如有定制化需求可以自行扩展。
该工具是基于SSH2协议的实现,在使用它的过程中非常容易,只需要指定合法的用户名口令,或者授权认证文件,就可以创建到远程Linux主机的连接,在建立起来的会话中调用该Linux主机上的脚本文件,执行相关操作。
使用注意: 1. WebLogic反弹需要等5秒左右 2. 该工具为对外测试版,请尽量按照正常思路来用,比如... 体积更小,不再依赖java环境,但程序采用.net编写,需要.net 4.0环境 待完成: we blogic回显结果测试中,稍后加入
java的一个工具类,自动判断当前系统,若是window启动bat脚本,若是linux启动linux脚本,执行结果后台打印
Java反序列化漏洞利用工具(joomla版本)亲测可用,直接GETSHELL以及执行命令没问题
使用注意: 1. WebLogic反弹需要等5秒左右 2. 该工具为对外测试版,请尽量按照正常思路来用,比如Url填写清楚,IP地址写对了,报错或者抛异常神马的别怪我,调输入校验好蛋疼。... 体积更小,不再依赖java环
使用注意: 1. WebLogic反弹需要等5秒左右 2. 该工具为对外测试版,请尽量按照正常思路来用,比如... 体积更小,不再依赖java环境,但程序采用.net编写,需要.net 4.0环境 待完成: weblogic回显结果测试中,稍后加入
ShellUtil:shell命令操作工具,包括linux登陆,命令执行...... 较为简单,具体需要自行扩充 SignUtil:签名工具,包括MD5 位运算 AES BASE64 SnowflakeIdWorker:ID生成工具 雪花算法 SocketUtil:socket测试...
1. WebLogic反弹需要等5秒左右 2. 该工具为对外测试版,请尽量按照正常思路来用,比如Url填写清楚,IP地址写对了,报错或者抛异常神马的别怪我...5. 体积更小,不再依赖java环境,但程序采用.net编写,需要.net 4.0环境