直接上代码、


/*** Created by hpp on 2017/6/5.*/import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import com.lczyfz.istep.common.utils.StringUtils;import java.io.*;/*** 远程执行linux的shell script* @author Ickes* @author2 hpp* @since  V0.2*/
public class RemoteExecuteCommand {//字符编码默认是utf-8private static String  DEFAULTCHART="UTF-8";private static Connection conn;private String ip;private String userName;private String userPwd;public RemoteExecuteCommand(String ip, String userName, String userPwd) {this.ip = ip;this.userName = userName;this.userPwd = userPwd;}public RemoteExecuteCommand() {}/*** 远程登录linux的主机* @author Ickes* @since  V0.1* @return*      登录成功返回true,否则返回false*/public Boolean login(){boolean flg=false;try {conn = new Connection(ip);conn.connect();//连接flg=conn.authenticateWithPassword(userName, userPwd);//认证if (flg){System.out.println("认证成功!");}} catch (IOException e) {e.printStackTrace();}return flg;}/*** @author Ickes* 远程执行shll脚本或者命令* @param cmd*      即将执行的命令* @return*      命令执行完后返回的结果值* @since V0.1*/public String execute(String cmd){String result="";try {if(login()){Session session= conn.openSession();//打开一个会话session.execCommand(cmd);//执行命令result=processStdout(session.getStdout(),DEFAULTCHART);//如果为得到标准输出为空,说明脚本执行出错了if(StringUtils.isBlank(result)){result=processStdout(session.getStderr(),DEFAULTCHART);}conn.close();session.close();}} catch (IOException e) {e.printStackTrace();}return result;}/*** @author Ickes* 远程执行shll脚本或者命令* @param cmd*      即将执行的命令* @return*      命令执行成功后返回的结果值,如果命令执行失败,返回空字符串,不是null* @since V0.1*/public String executeSuccess(String cmd){String result="";try {if(login()){Session session= conn.openSession();//打开一个会话session.execCommand(cmd);//执行命令result=processStdout(session.getStdout(),DEFAULTCHART);conn.close();session.close();}} catch (IOException e) {e.printStackTrace();}return result;}/*** 解析脚本执行返回的结果集* @author Ickes* @param in 输入流对象* @param charset 编码* @since V0.1* @return*       以纯文本的格式返回*/public static String processStdout(InputStream in, String charset){InputStream    stdout = new StreamGobbler(in);StringBuffer buffer = new StringBuffer();;try {BufferedReader br = new BufferedReader(new InputStreamReader(stdout,charset));String line=null;while((line=br.readLine()) != null){buffer.append(line+"\n");}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return buffer.toString();}public static void main(String[] args) {RemoteExecuteCommand rec=new RemoteExecuteCommand("xx.xx.xx.xx", "root","root");//执行命令try {if(rec.login()){System.out.println("=====第一个步骤=====");Session session= conn.openSession();//打开一个会话//TODO:多条命令session.execCommand("cd /home/ubuntu/Desktop/music_rec/user_sim;echo \"123\" | sudo  -S ./caculate_tim_sim.sh similar");//执行命令String result=processStdout(session.getStdout(),DEFAULTCHART);//如果为得到标准输出为空,说明脚本执行出错了if(StringUtils.isBlank(result)){System.out.println("脚本出错");result=processStdout(session.getStderr(),DEFAULTCHART);}System.out.println(result);session.close();System.out.println("=====第二个步骤=====");Session session2= conn.openSession();//打开一个会话//TODO:多条命令session2.execCommand("cd /home/ubuntu/Desktop/music_rec/user_sim/result;cat xyy_result_m10d.json");//执行命令String result2=processStdout(session2.getStdout(),DEFAULTCHART);//如果为得到标准输出为空,说明脚本执行出错了if(StringUtils.isBlank(result2)){System.out.println("脚本出错");result2=processStdout(session2.getStderr(),DEFAULTCHART);}System.out.println(result2);session2.close();conn.close();}} catch (IOException e) {e.printStackTrace();}}public static void setCharset(String charset) {DEFAULTCHART = charset;}public Connection getConn() {return conn;}public void setConn(Connection conn) {this.conn = conn;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd = userPwd;}
}

java 连接Linux服务器并执行指令相关推荐

  1. java连接linux服务器执行shell命令(框架分析+推荐)

    java连接linux服务器执行shell命令(框架分析+推荐) 一.分类+连接方式 程序打成jar包,在本地服务器上执行shell命令.这种使用MyRuntimeUtil工具类 java程序远程li ...

  2. Java连接Linux服务器上传文件

    背景: 项目中有需求要使用Java上传文件至服务器及执行某些shell脚本.通过查阅一些资料,反复测试了两套方案,各有优缺点,下面分别阐述一下. 实现方案一:SpringBoot + JSch + L ...

  3. java远程执行功能_Java远程连接Linux服务器并执行命令及上传文件功能

    Java远程连接Linux服务器并执行命令及上传文件功能 发布于 2020-3-6| 复制链接 摘记:  最近再开发中遇到需要将文件上传到Linux服务器上,至此整理代码笔记.此种连接方法中有考虑到并 ...

  4. winscp用密钥连接linux服务器和java程序用密钥连接服务器

    一.winscp用密钥连接linux服务器 第一步,生成ssh公钥密钥对: 使用Tera Term登录进服务器(这时候先用用户名和密码登录), #ssh-keygen -t rsa cd进入进入/ro ...

  5. Java获取linux服务器cpu、内存、硬盘相关信息

    需要用到jcraft依赖,如果依赖失效,请前往官方获取jcraft官网,maven地址https://search.maven.org/artifact/com.jcraft/jsch <dep ...

  6. JAVA远程连接ssh异步,SSH-2实现java连接远程服务器并执行脚本命令

    参考文档: maven jar包:https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 Ganymed SSH2 API文档 ...

  7. linux服务器上的项目读取本地文件,java访问linux服务器读取文件路径

    java访问linux服务器读取文件路径 内容精选 换一换 通过ADC将文件传输到Host.参见准备环境完成环境配置.以运行用户登录安装Toolkit组件的服务器.执行命令,将A.java文件传输到H ...

  8. java 到服务器上读文件路径,java访问linux服务器读取文件路径

    java访问linux服务器读取文件路径 内容精选 换一换 通过ADC从Host获取文件.参见准备环境完成环境配置.以运行用户登录安装Toolkit组件的服务器.执行命令,从Host获取B.java, ...

  9. java jsch jar_基于Jsch实现Java操作linux服务器

    [概述] 如果大家熟悉Linux的话,一定对ssh,sftp,scp等命令非常熟悉.ssh是一个安全协议,用来在不同系统或者服务器之间进行安全连接.ssh在连接和传送的过程中会加密所有的数据.但是ss ...

最新文章

  1. 【C语言】宏offsetof的模拟实现 (计算结构体中某变量相对于首地址的偏移)
  2. CPLEX在Linux上的安装与配置
  3. 移动端重构系列5——等分,居中等
  4. VTK:PolyData之InterpolateMeshOnGrid
  5. HALCON示例程序sequence_diff.hdev通过两张连续图像进行车辆流量监控
  6. 7-1 是否同一棵二叉搜索树 (30分)
  7. chmod命令用于更改文件或目录的所有者_Linux 修改权限命令 chmod 用法示例
  8. 国内外五款免费的协作类管理软件推荐
  9. (判断题)两台路由器之间转发的数据包一定不携带VLAN TAG?
  10. 软件著作权个人申请全套攻略
  11. 【记录贴】联想笔记本小新进入BIOS的方法
  12. 家庭光纤宽带延长光纤
  13. 源码分析mmc体系结构
  14. 微型投影仪第五篇——Metro UI
  15. 键盘 Key Code对照表
  16. MySQL数据库命令行
  17. 超简单、超实用的统计方法——因子分析
  18. 从高考到程序员,做自己就好
  19. CSUST选拔赛题解之-Problem C: 先有durong后有天
  20. effector - 必应词典

热门文章

  1. 【目标检测】YOLOv5训练工具,简化训练准备过程
  2. SPOJ 10628 Count on a tree 主席树 附数据生成器
  3. python获取目标时间距离现在多长时间(‘2020-5-30 23:40:00‘)
  4. 南京计算机与软件学院,南京信息工程大学 计算机与软件学院 刘 琦
  5. 数据库介绍与数据库安装
  6. 送餐界的扛把子又稳了
  7. 禁止迅雷极速版强制升级为最新迅雷版本的方法,最简单,最有效!
  8. C语言中: 整型数据相除 得到浮点型数据
  9. 2021 ACM杰出科学家揭榜:清华刘奕群、上科大虞晶怡等19位华人学者入选
  10. 电信 802.1p 设置_电信VoLTE免费开通