在linux的脚本中,如果不对机器做其他的处理,不能实现在linux的机器上执行命令。为了解决这个问题,写了个小工具来解决这个问题。

后面的代码是利用java实现的可远程执行linux命令的小工具,代码中使用了jsch这个开源包。

JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。jsch的jar,可从官网下载。

 import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session; /**
*
* 类似ssh执行命令的小工具
*
* @author walker
*
*/
public class SSH {
private String userName;
private String password;
private String host; public SSH(String host, String userName, String password) {
this.host = host;
this.userName = userName;
this.password = password;
} private Session getSession() {
JSch jsch = new JSch();
Session session = null; try {
session = jsch.getSession(userName, host);
session.setPassword(password); Properties props = new Properties();
props.put("StrictHostKeyChecking", "no");
session.setConfig(props);
session.connect();
} catch (JSchException e) {
e.printStackTrace();
}
return session;
} public boolean exec(String[] cmds) {
StringBuffer cmdBuffer = new StringBuffer(); for (int i = 0; i < cmds.length; i++) {
if (i != 3) {
cmdBuffer.append(" ");
}
cmdBuffer.append(cmds[i]);
}
return exec(cmdBuffer.toString());
} public boolean exec(String cmd) {
Session session = getSession();
Channel channel = null;
InputStream in = null;
try {
channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(cmd);
((ChannelExec) channel).setInputStream(null);
((ChannelExec) channel).setErrStream(System.err); // 获取执行错误的信息 in = channel.getInputStream();
channel.connect();
byte[] b = new byte[1024];
int size = -1;
while ((size = in.read()) > -1) {
System.out.print(new String(b, 0, size)); // 打印执行命令的所返回的信息
}
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭流
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
// 关闭连接
channel.disconnect();
session.disconnect();
} return false;
} /**
* @param args
*/
public static void main(String[] args) {
if (args.length < 4) {
System.err.println("usage:\n\t" + SSH.class.getName()
+ " <host> <usename> <password> <cmds>");
System.exit(1);
} // 用以保存命令(可能是一串很长的命令)
StringBuffer cmdBuffer = new StringBuffer();
for (int i = 3; i < args.length; i++) {
if (i != 3) {
cmdBuffer.append(" ");
}
cmdBuffer.append(args[i]);
} SSH ssh = new SSH(args[0], args[1], args[2]);
System.exit(ssh.exec(cmdBuffer.toString()) ? 0 : 1);
}
}

利用java实现可远程执行linux命令的小工具的更多相关文章

  1. java中使用Process执行linux命令

    代码如下 BufferedReader reader = null; String cmd = "netstat -anp|grep :8080";//命令中有管道符 | 需要如下 ...

  2. 基于paramiko进行远程执行Linux命令

    直接贴一段代码import paramiko class remote_start(object): def __init__(self,host,username,pwd): self.ssh = ...

  3. Java程序执行Linux命令

    Java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: ProcessBuilder.start() 和 Runtime.exec 方法创建一个 ...

  4. Java程序执行Linux命令(JSP运行其他程序)

    java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: ProcessBuilder.start() 和 Runtime.exec 方法创建一个 ...

  5. Java 执行linux命令(转)

    转自 http://blog.csdn.net/a19881029/article/details/8063758 java程序中要执行linux命令主要依赖2个类:Process和Runtime 首 ...

  6. Pyhton 利用threading远程下发文件和远程执行linux系统命令

    #!/usr/bin/env python # encoding: utf-8 #__author__ = 'cp' #__date__ = '21/07/16 上午 10:32' import th ...

  7. Linux远程执行shell命令

    Linux远程执行shell命令   在Linux系统中,我们经常想在A机器上,执行B机器上的SHELL命令. 下面这种方案,是一种流行可靠的方案. 1.SSH无密码登录 # 本地服务器执行(A机器) ...

  8. 再见Xshell、Xftp!Python执行Linux命令、上传下载远程文件

    相信大家应该都接触过Linux操作系统(Ubuntu.Centos等),那么在使用的Linux操作系统需要使用一些远程ssh工具,尤其是公网服务器. 常用的ssh工具主要有:Xshell.MobaXt ...

  9. Linux远程执行Shell命令或脚本

    ## 远程执行shell命令 ssh [user]@[server] '[command]' # eg. ssh root@192.168.1.1 'uptime' ## 远程执行本地shell脚本 ...

随机推荐

  1. React Native移动开发实战-3-实现页面间的数据传递

    React Native使用props来实现页面间数据传递和通信.在React Native中,有两种方式可以存储和传递数据:props(属性)以及state(状态),其中: props通常是在父组件 ...

  2. 纯命令行界面下安装并运行官方Android emulator

    纯命令行界面指没有安装Android studio. 下载sdk-tools 可以根据实际需要下载,不需要FQ(2018-04-07) 下载后只有一个tools目录. 平台 SDK 工具包 大小 SH ...

  3. gzip命令详解

    基础命令学习目录首页 好文链接:https://blog.csdn.net/m0_38132420/article/details/78577247 原文链接:http://www.cnblogs.c ...

  4. 实验二 Java面向对象程序设计 20135321

    课程:Java程序设计   班级:1353    姓名:余佳源  学号:20135321 成绩:             指导教师:娄嘉鹏      实验日期:2015-5-8 实验密级:       ...

  5. 20172325 2017-2018-2 《Java程序设计》第五周学习总结

    20172325 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 1.布尔表达式的值只有真或假,表达式的结果决定了下一步将要执行的语句. 2.循环语句可以用在 ...

  6. Class 1

    “在最艰苦的时候,就是你离成功最近的时候”,让暴风雨来得更猛烈些吧. 健身教练/学员,买的那本Java Web还是那么新,显然假期偷懒了,只能一点一点的补回来了.一个假期没有打开过自己的脑洞,真心醉了 ...

  7. UDP与TCP笔记

    1.UDP UDP协议在工作时是建立在IP协议之上的,UDP从进程的缓冲区接收进程每一次产生的输出,对每次输出都生成一个UDP数据报,然后把生成的UDP数据报直接封装在IP数据报中进行传输,因此在传输 ...

  8. iOS- 如何使用Alcatraz来高效的管理Xcode-Plugin(Xcode插件)

    1.前言 相信各位iOS攻城师用的Xocde的快捷插件也不少,今天向大家分享一款能高效快捷的管理Xcode-Plugin的软件<Alcatraz>,自己亲自体验后,爱不释手.   (这里用 ...

  9. JSPatch 原理

    原理 JSPatch用iOS内置的JavaScriptCore.framework作为JS引擎,但没有用它JSExport的特性进行JS-OC函 数互调,而是通过Objective-C Runtime ...

  10. [BUAA_SE_2017]个人阅读作业 + 总结

    个人阅读作业 银弹 银弹是指能让狼人一枪毙命的致命子弹,对于软件工程而言,我觉得是不存在银弹的.每一项软件开发都是极为特殊的,有特定的需求.特定的功能,如果存在银弹能够直击要害解决问题,那么软件的开发 ...