JSch远程执行脚本

2017-02-24

在自动化测试的时候,需要远程操控服务器做一些操作,比如切日、起服务器、执行某些脚本。如何实现?

我们可以利用JSch,远程执行脚本。JSch是Java Secure Channel的缩写,是一个SSH2功能的纯Java实现,具体信息可以参考JSch官网。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,同时你也可以集成它的功能到你自己的应用程序。在使用前,需要下载并导入JSch包:jsch-0.1.50.jar。

以下是实现代码通过JSch远程Windows系统和Linux系统执行脚本。其中Windows系统需要安装freeSSHd,具体步骤可查看终端模拟工具:Xshell 4。

1 pom.xml

com.jcraft

jsch

0.1.53

2 SshUtil.java

packagetest;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importcom.jcraft.jsch.ChannelExec;importcom.jcraft.jsch.JSch;importcom.jcraft.jsch.JSchException;importcom.jcraft.jsch.Session;public classSshUtil {public static String exec(String host, String user, String psw, intport, String command) {

String result= "";

Session session= null;

ChannelExec openChannel= null;try{

JSch jsch= newJSch();//getSession()只是创建一个session,需要设置必要的认证信息之后,调用connect()才能建立连接。

session =jsch.getSession(user, host, port);

java.util.Properties config= newjava.util.Properties();

config.put("StrictHostKeyChecking", "no");

session.setConfig(config);

session.setPassword(psw);

session.connect();//调用openChannel(String type)//可以在session上打开指定类型的channel。该channel只是被初始化,使用前需要先调用connect()进行连接。//Channel的类型可以为如下类型://shell - ChannelShell//exec - ChannelExec//direct-tcpip - ChannelDirectTCPIP//sftp - ChannelSftp//subsystem - ChannelSubsystem//其中,ChannelShell和ChannelExec比较类似,都可以作为执行Shell脚本的Channel类型。它们有一个比较重要的区别:ChannelShell可以看作是执行一个交互式的Shell,而ChannelExec是执行一个Shell脚本。

openChannel = (ChannelExec) session.openChannel("exec");

openChannel.setCommand(command);int exitStatus =openChannel.getExitStatus();

System.out.println(exitStatus);

openChannel.connect();

InputStream in=openChannel.getInputStream();

BufferedReader reader= newBufferedReader(newInputStreamReader(in));

String buf= null;while ((buf = reader.readLine()) != null) {

result+= " " +buf;

}

}catch(JSchException e) {

result+=e.getMessage();

}catch(IOException e) {

result+=e.getMessage();

}finally{if (openChannel != null && !openChannel.isClosed()) {

openChannel.disconnect();

}if (session != null &&session.isConnected()) {

session.disconnect();

}

}returnresult;

}

}

View Code

3 Client.java

packagetest;public classClient {public static voidmain(String[] args) {

ExecuteCmdOnWin();

}private static voidExecCmdOnLinux() {

String ip= "xxx.xxx.xxx.xxx";int port = 22;

String user= "username";

String pwd= "password";

String batCommand= "ls";try{

System.out.println("系统执行的CMD命令是:\"[" + batCommand + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port, batCommand));

Thread.sleep(1000);

Thread.sleep(1000);

}catch(Exception e) {

System.out.println("切日操作失败,请查找原因");

}

}private static voidExecuteCmdOnWin() {

String ip= "xxx.xxx.xxx.xxx";int port = 22;

String user= "username";

String pwd= "password";

String batCommand= "cmd /c \"start " + "C:/createFolder.bat" + "\"";//运行批处理,会打开一个cmd窗口,这里会执行命令kill cmd.exe 进程

String killCMD = "cmd /c \"taskkill /f /fi \"IMAGENAME eq cmd.exe\"\"";

String updatedatecommand= "cmd /c \"date " + "2017/2/24";

String dirCommand= "cmd /c dir";try{

System.out.println("系统执行的CMD命令是:\"[" + batCommand + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port, batCommand));

System.out.println("系统执行的CMD命令是:\"[" + killCMD + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port, killCMD));

System.out.println("系统执行的CMD命令是:\"[" + updatedatecommand + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port,updatedatecommand));

System.out.println("系统执行的CMD命令是:\"[" + dirCommand + "]\"");

System.out.println(SshUtil.exec(ip, user, pwd, port, dirCommand));

}catch(Exception e) {

System.out.println("切日操作失败,请查找原因");

}

}

}

View Code

4 结果

4.1 Window

系统执行的CMD命令是:"[cmd /c "start C:/createFolder.bat"]"

-1

系统执行的CMD命令是:"[cmd /c "taskkill /f /fi "IMAGENAME eq cmd.exe""]"

-1

�ɹ�: ����ֹ PID Ϊ 3444 �Ľ��̡� �ɹ�: ����ֹ PID Ϊ 2860 �Ľ��̡� �ɹ�: ����ֹ PID Ϊ 2980 �Ľ��̡�

系统执行的CMD命令是:"[cmd /c "date 2017/2/24]"

-1

系统执行的CMD命令是:"[cmd /c dir]"

-1

������ C �еľ�û�б�ǩ�� ������к��� 3C69-84C5 C:\Users\Administrator\Desktop ��Ŀ¼ 2017/02/22 16:28

View Code

4.2 Linux

系统执行的CMD命令是:"[ls]"

-1

tmpfolder 公共的 模板 视频 图片 文档 下载 音乐 桌面

View Code

5 参考

java jsch执行脚本_JSch远程执行脚本相关推荐

  1. linux远程执行本地脚本,ssh远程执行命令方法和Shell脚本实例

    写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 ser ...

  2. ssh远程执行python本地脚本_ssh远程执行命令方法和Shell脚本实例

    写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 ser ...

  3. salt远程执行python脚本_SaltStack远程执行Windows job程序(黑窗口)填坑经过

    近期接到领导通知,要将公司内的所有Windows服务添加到自动发布系统中,由于这种服务很多,节点分布散乱,每次都是由开发主管手动替换(虽然他们自己开发了自动打包替换工具,但仍需要一台一台登陆到服务器上 ...

  4. 使用shell脚本ssh远程执行命令,使用awk时总是报错

    ssh -o StrictHostKeyChecking=no root@$ip "ps -ef |grep ${SERVER_EXE} |grep -v grep | awk '{prin ...

  5. linux 带环境变量 远程执行,SSH远程执行命令环境变量问题

    SSH命令格式 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address: ...

  6. jmeter教程(十五):远程执行

    远程执行,就是脚本放在本地,执行却在另一台电脑上执行,当然,可以是远程多台电脑一起执行.最常见的场景就是,跑性能测试的时候,一台电脑负载不起需要的线程时,就需要两台或者更多的电脑来启动线程跑测试,线程 ...

  7. ssh远程执行命令的方法

    设置免密登录之后,通常ssh remote_ip  "command"就可以方便的执行远程命令.如果遇到包含单引号或者双引号的命令,执行不成功,如: awk -F'  ' '{pr ...

  8. saltstack(自动化运维工具)——介绍、安装、部署+远程执行

    一.saltstack简介 saltstack是一个配置管理系统,能够维护预定义状态的远程节点. saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据. saltstack是 ...

  9. java 远程shell脚本_java通过ssh连接服务器执行shell命令详解及实例

    java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令:JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转 ...

  10. java jsch 调用shell_Java-Jsch-Shell脚本执行后退出

    我正在尝试使用Jsch编写Java程序,在该程序中,我想使用该程序开始执行Shell脚本,并在执行完Shell脚本后退出该程序. String userName = ""; Str ...

最新文章

  1. SAP QM 内向交货单包装的时候触发的检验批不能被自动取消?
  2. BZOJ 3119 Book (贪心+数学推导)
  3. 机器学习常见知识点自查50问与答
  4. sqlserver生成脚本
  5. linux(centOS7,mini),python环境的搭建
  6. 关于HTTPS的几个问题
  7. 请收下这10篇2020上半年最受欢迎的数据库技术文章
  8. python一个星期可以入门吗_Python一星期入门第6篇: 模块和包
  9. 「译」JavaScript 的 MVC 模式
  10. 往PPT幻灯中添加图片的方法有哪些?
  11. ctf-web-sql注入
  12. 姓名评分程序PHP,姓名测试打分,免费姓名评分测试,免费姓名测试评分 - 姓名算命最准的网站...
  13. 优麒麟 20.04 LTS Pro安装Canon LBP2900打印机
  14. 浙江师范大学c语言函数实验答案,C语言实验浙江师范大学8-2 D阵列+答案.doc
  15. 从双钻模型看产品规划
  16. 使用Adobe Acrobat编辑PDF,实现文件签名
  17. 2022-2028年中国眼镜制造行业市场竞争策略及未来发展潜力报告
  18. 非线性转化为线性规划的方法
  19. oracle 查询秒,oracle 查询N秒之前的数据
  20. 世界各地时间缩写_世界各地的天然气价格

热门文章

  1. 利用Windows注册Dll或其他文件
  2. linux操作系统第三版课后题答案,linux操作系统( 课后习题答案).doc
  3. QTP基础教程(讲义)《软件测试技术》
  4. 国际版云购网站代码开发实现案例
  5. MySQL建库建表语句
  6. Excel技能培训之十四 统计函数count,countif,counta,countblank,large,small,average,max,min
  7. 麻瓜python视频教程_Python基础教程|麻瓜编程Python Web开发工程师教程完整版_ - 极光下载站...
  8. python椭圆花瓣_Python抓取花瓣网高清美图
  9. 企业信息化管理软件,如何走出开发困境
  10. 第八章 项目质量管理