Java使用Shell脚本

package com.corp.prj.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.log4j.Logger; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.SCPClient; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; /** * Provides static methods for running SSH, scp as well as local commands. * */ public class CommandRunner { private static final Logger logger = Logger.getLogger(CommandRunner.class); private CommandRunner() { } /** * Get remote file through scp * @param host * @param username * @param password * @param remoteFile * @param localDir * @throws IOException */ public static void scpGet(String host, String username, String password, String remoteFile, String localDir) throws IOException { if (logger.isDebugEnabled()) { logger.debug("spc [" + remoteFile + "] from " + host + " to " + localDir); } Connection conn = getOpenedConnection(host, username, password); SCPClient client = new SCPClient(conn); client.get(remoteFile, localDir); conn.close(); } /** * Put local file to remote machine. * @param host * @param username * @param password * @param localFile * @param remoteDir

* @throws IOException */ public static void scpPut(String host, String username, String password, String localFile, String remoteDir) throws IOException { if (logger.isDebugEnabled()) { logger.debug("spc [" + localFile + "] to " + host + remoteDir); } Connection conn = getOpenedConnection(host, username, password); SCPClient client = new SCPClient(conn); client.put(localFile, remoteDir); conn.close(); } /** * Run SSH command. * @param host * @param username * @param password * @param cmd * @return exit status * @throws IOException */ public static int runSSH(String host, String username, String password, String cmd) throws IOException { if (logger.isDebugEnabled()) { logger.debug("running SSH cmd [" + cmd + "]"); } Connection conn = getOpenedConnection(host, username, password); Session sess = conn.openSession(); sess.execCommand(cmd); InputStream stdout = new StreamGobbler(sess.getStdout()); BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); while (true) { // attention: do not comment this block, or you will hit NullPointerException // when you are trying to read exit status String line = br.readLine(); if (line == null) break; if (logger.isDebugEnabled()) { logger.debug(line); } } sess.close(); conn.close(); return sess.getExitStatus().intValue();

} /** * return a opened Connection * @param host * @param username * @param password * @return * @throws IOException */ private static Connection getOpenedConnection(String host, String username, String password) throws IOException { if (logger.isDebugEnabled()) { logger.debug("connecting to " + host + " with user " + username + " and pwd " + password); } Connection conn = new Connection(host); conn.connect(); // make sure the connection is opened boolean isAuthenticated = conn.authenticateWithPassword(username, password); if (isAuthenticated == false) throw new IOException("Authentication failed."); return conn; } /** * Run local command * @param cmd * @return exit status * @throws IOException */ public static int runLocal(String cmd) throws IOException { if (logger.isDebugEnabled()) { logger.debug("running local cmd [" + cmd + "]"); } Runtime rt = Runtime.getRuntime(); Process p = rt.exec(cmd); InputStream stdout = new StreamGobbler(p.getInputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); while (true) { String line = br.readLine(); if (line == null) break; if (logger.isDebugEnabled()) { logger.debug(line); }

} return p.exitValue(); } } public static String sshExecute(String host, String user, String pwd, String command) { String osName = System.getProperty("os.name"); // ps -ef|grep tomcat|grep -v grep|awk '{print $2}' StringBuffer sb = new StringBuffer(); try { JSch jsch = new JSch(); if (osName.toUpperCase().indexOf("WINDOWS") > -1) { jsch.setKnownHosts("c:\\known_hosts"); } else { jsch.setKnownHosts("/root/.ssh/known_hosts"); } Session session = jsch.getSession(user, host, 22); session.setPassword(pwd); session.connect(); Channel channel = session.openChannel("exec"); ((ChannelExec) channel).setCommand(command); InputStream in = channel.getInputStream(); channel.connect(); int nextChar; while (true) { while ((nextChar = in.read()) != -1) { sb.append((char) nextChar); } if (channel.isClosed()) { System.out.println("exit-status: " + channel.getExitStatus()); break; } try { Thread.sleep(1000); } catch (Exception ee) { } } channel.disconnect(); session.disconnect(); } catch (Exception e) {

e.printStackTrace(); } return sb.toString(); } /** * 利用 JSch 包实现远程主机 SHELL 命令执行 * @param ip 主机 IP * @param user 主机登陆用户名 * @param psw 主机登陆密码 * @param port 主机 ssh2 登陆端口,如果取默认值,传-1 * @param privateKey 密钥文件路径 * @param passphrase 密钥的密码 */ public static void sshShell(String ip, String user, String psw ,int port ,String privateKey ,String passphrase) throws Exception{ Session session = null; Channel channel = null; JSch jsch = new JSch(); //设置密钥和密码 if (privateKey != null && !"".equals(privateKey)) { if (passphrase != null && "".equals(passphrase)) { //设置带口令的密钥 jsch.addIdentity(privateKey, passphrase); } else { //设置不带口令的密钥 jsch.addIdentity(privateKey); } } if(port <=0){ //连接服务器,采用默认端口 session = jsch.getSession(user, ip); }else{ //采用指定的端口连接服务器 session = jsch.getSession(user, ip ,port);

} //如果服务器连接不上,则抛出异常 if (session == null) { throw new Exception("session is null"); } //设置登陆主机的密码 session.setPassword(psw);//设置密码 //设置第一次登陆的时候提示,可选值:(ask | yes | no) session.setConfig("StrictHostKeyChecking", "no"); //设置登陆超时时间 session.connect(30000); try { //创建 sftp 通信通道 channel = (Channel) session.openChannel("shell"); channel.connect(1000); //获取输入流和输出流 InputStream instream = channel.getInputStream(); OutputStream outstream = channel.getOutputStream(); //发送需要执行的 SHELL 命令,需要用\n 结尾,表示回车 String shellCommand = "ls \n"; outstream.write(shellCommand.getBytes()); outstream.flush(); //获取命令执行的结果 if (instream.available() > 0) { byte[] data = new byte[instream.available()]; int nLen = instream.read(data); if (nLen < 0) { throw new Exception("network error."); } //转换输出结果并打印出来 String temp = new String(data, 0, nLen,"iso8859-1"); System.out.println(temp); } outstream.close(); instream.close();

  • Java通过Telnet连接执行shell脚本

    Java通过Telnet连接执行shell脚本

    Java通过Telnet连接执行shell脚本...

    贡献者:网络收集
    100367
  • Shell脚本编程运用

    Shell脚本编程运用

    Shell脚本编程运用...

    贡献者:网络收集
    299996
  • 使用 Shell 脚本管理系统

    使用 Shell 脚本管理系统

    使用 Shell 脚本管理系统...

    贡献者:网络收集
    356839
  • 在Unix Shell脚本里运行Java application

    在Unix Shell脚本里运行Java application

    在Unix Shell脚本里运行Java application...

    贡献者:网络收集
    743149
  • Java执行shell命令代码亲测可用

    Java执行shell命令代码亲测可用

    Java执行shell命令代码亲测可用...

    贡献者:网络收集
    753317
  • 第12章 学习使用Shell脚本

    第12章 学习使用Shell脚本

    第12章 学习使用Shell脚本...

    贡献者:网络收集
    452157
  • linux学习使用Shell脚本

    linux学习使用Shell脚本

    linux学习使用Shell脚本...

    贡献者:网络收集
    915090
  • Shell排序的java实现代码

    Shell排序的java实现代码

    Shell排序的java实现代码...

    贡献者:网络收集
    914930
  • java中运行shell

    java中运行shell

    java中运行shell...

    贡献者:网络收集
    612899
  • java调用shell

    java调用shell

    java调用shell...

    贡献者:网络收集
    657740
  • 网友在搜
    where did aztecs live ruimatsushita tube you will see the kid 新玛奇英雄传 打不了 ツムラ八味地黄丸 you sent me flying 韩三篇 新浪博客 early view 小木虫 unity steamvr插件 触手猴钢琴六兆年 zblwvnp 163.com 接皮带 圣杯战争同人小说 司马老贼 IEEE-1394b 青椒在冷库能储存多久 广发银行信用卡有什么活动 acme 标准 hotel nikko fukuoka なんかのさなぎ 老娘舅和他的儿孙们856 爽肤水都含酒精吗 2pack是什么意思 关于温柔的图片 水彩壁纸高清 古装无厘头搞笑电影 关于玄武湖的作文 origins ginzing dellxps13无法连wifi 郭富城2016红馆演唱会 唯美手绘动漫图片大全 xbef only good日本 roc a fella怎么读 linux 解压后乱码 camera 参数设置 海岛大亨5右秘籍没用 q9300 l5420发热 campaign for 巨星养成之血族萌妻 cydia软件源下载 kwill金炯秀女朋友 yyybbb 知乎 多乐士 环保 apt 淘宝镜像 window 系统重启日志 picid is null 微博 innodb 日志 青春校园师生恋 满广志 195 异地恋学生拍摄微电影 波多里结衣第一部作品 死亡录像是4 mp4 劳动合同法保密协议 lisp中的key 未来教育软件研发中心 d link路由器网址 界面适配 树莓派的引脚串口通信

    声明:本站内容部分源于网络转载,出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,请咨询相关专业人士。

    如果无意之中侵犯了您的版权,或有意见、反馈或投诉等情况, 联系我们:点击这里给我发消息

    Copyright © 2016 All Rights Reserved 紫菜网 手机站