java 连接Linux服务器并执行指令
直接上代码、
/*** 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服务器并执行指令相关推荐
- java连接linux服务器执行shell命令(框架分析+推荐)
java连接linux服务器执行shell命令(框架分析+推荐) 一.分类+连接方式 程序打成jar包,在本地服务器上执行shell命令.这种使用MyRuntimeUtil工具类 java程序远程li ...
- Java连接Linux服务器上传文件
背景: 项目中有需求要使用Java上传文件至服务器及执行某些shell脚本.通过查阅一些资料,反复测试了两套方案,各有优缺点,下面分别阐述一下. 实现方案一:SpringBoot + JSch + L ...
- java远程执行功能_Java远程连接Linux服务器并执行命令及上传文件功能
Java远程连接Linux服务器并执行命令及上传文件功能 发布于 2020-3-6| 复制链接 摘记: 最近再开发中遇到需要将文件上传到Linux服务器上,至此整理代码笔记.此种连接方法中有考虑到并 ...
- winscp用密钥连接linux服务器和java程序用密钥连接服务器
一.winscp用密钥连接linux服务器 第一步,生成ssh公钥密钥对: 使用Tera Term登录进服务器(这时候先用用户名和密码登录), #ssh-keygen -t rsa cd进入进入/ro ...
- Java获取linux服务器cpu、内存、硬盘相关信息
需要用到jcraft依赖,如果依赖失效,请前往官方获取jcraft官网,maven地址https://search.maven.org/artifact/com.jcraft/jsch <dep ...
- JAVA远程连接ssh异步,SSH-2实现java连接远程服务器并执行脚本命令
参考文档: maven jar包:https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 Ganymed SSH2 API文档 ...
- linux服务器上的项目读取本地文件,java访问linux服务器读取文件路径
java访问linux服务器读取文件路径 内容精选 换一换 通过ADC将文件传输到Host.参见准备环境完成环境配置.以运行用户登录安装Toolkit组件的服务器.执行命令,将A.java文件传输到H ...
- java 到服务器上读文件路径,java访问linux服务器读取文件路径
java访问linux服务器读取文件路径 内容精选 换一换 通过ADC从Host获取文件.参见准备环境完成环境配置.以运行用户登录安装Toolkit组件的服务器.执行命令,从Host获取B.java, ...
- java jsch jar_基于Jsch实现Java操作linux服务器
[概述] 如果大家熟悉Linux的话,一定对ssh,sftp,scp等命令非常熟悉.ssh是一个安全协议,用来在不同系统或者服务器之间进行安全连接.ssh在连接和传送的过程中会加密所有的数据.但是ss ...
最新文章
- 【C语言】宏offsetof的模拟实现 (计算结构体中某变量相对于首地址的偏移)
- CPLEX在Linux上的安装与配置
- 移动端重构系列5——等分,居中等
- VTK:PolyData之InterpolateMeshOnGrid
- HALCON示例程序sequence_diff.hdev通过两张连续图像进行车辆流量监控
- 7-1 是否同一棵二叉搜索树 (30分)
- chmod命令用于更改文件或目录的所有者_Linux 修改权限命令 chmod 用法示例
- 国内外五款免费的协作类管理软件推荐
- (判断题)两台路由器之间转发的数据包一定不携带VLAN TAG?
- 软件著作权个人申请全套攻略
- 【记录贴】联想笔记本小新进入BIOS的方法
- 家庭光纤宽带延长光纤
- 源码分析mmc体系结构
- 微型投影仪第五篇——Metro UI
- 键盘 Key Code对照表
- MySQL数据库命令行
- 超简单、超实用的统计方法——因子分析
- 从高考到程序员,做自己就好
- CSUST选拔赛题解之-Problem C: 先有durong后有天
- effector - 必应词典
热门文章
- 【目标检测】YOLOv5训练工具,简化训练准备过程
- SPOJ 10628 Count on a tree 主席树 附数据生成器
- python获取目标时间距离现在多长时间(‘2020-5-30 23:40:00‘)
- 南京计算机与软件学院,南京信息工程大学 计算机与软件学院 刘 琦
- 数据库介绍与数据库安装
- 送餐界的扛把子又稳了
- 禁止迅雷极速版强制升级为最新迅雷版本的方法,最简单,最有效!
- C语言中: 整型数据相除 得到浮点型数据
- 2021 ACM杰出科学家揭榜:清华刘奕群、上科大虞晶怡等19位华人学者入选
- 电信 802.1p 设置_电信VoLTE免费开通