Java使用ethz通过ssh2执行远程机器Linux上命令,
封装定义Linux机器的环境信息
package com.tom; import java.io.File; public class Env { private String hostaddr; //Linux机器的IP地址 private Integer port; //SSH访问端口,默认22 private String username; //通过用户名密码访问Linux机器时的用户名 private File pemFile; //通过SSH Key认证时,pemFile包含的是SSH Public Key内容 private String passwd;//通过用户名密码访问Linux机器时的密码 private Authentication authentication; public Env(String hostaddr, Integer port, String username, File pemFile, String passwd, Authentication authentication) { this.hostaddr = hostaddr; this.port = port; this.username = username; this.pemFile = pemFile; this.passwd = passwd; this.authentication = authentication; } public String getHostaddr() { return hostaddr; } public Integer getPort() { return port; } public String getUsername() { return username; } public File getPemFile() { return pemFile; } public String getPasswd() { return passwd; } public Authentication getAuthentication() { return authentication; } }
登录Linxu的认证方式
public enum Authentication { USER_PASSWORD("user-password"), SSH_KEY("ssh-key");//用户名密码方式,ssh-key方式 private String name; Authentication(String name) { this.name = name; } @Override public String toString() { return this.name; } }
package com.tom; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import java.io.*; public class CommandExecutor { private static final String LINE_SEPARATOR = System.getProperty("line.separator"); //Env封装了远程机器的访问信息 //cmd是要执行的shell命令 public static String exec(Env v, String cmd) throws IOException { Connection conn; if (v.getPort() != null) { conn = new Connection(v.getHostaddr(), v.getPort()); } else { conn = new Connection(v.getHostaddr()); } //使用Key认证 //PemFile是ssh public key文件 boolean b = conn.authenticateWithPublicKey(v.getUsername(), v.getPemFile(), v.getPasswd()); if (!b) { throw new IllegalArgumentException(); } Session session = null;//Java进程与Linux建立会话 BufferedReader br = null; try { session = conn.openSession(); session.execCommand(cmd); //执行命令 InputStream stdIn = session.getStdout();//获得命令执行的标准输出 InputStream errIn = session.getStderr(); //获得命令执行的标准错误输出 StringBuilder sb = new StringBuilder("Standard output:").append(LINE_SEPARATOR); br = new BufferedReader(new InputStreamReader(stdIn, "UTF-8")); String str = null; while ((str = br.readLine()) != null) { sb.append(str).append(LINE_SEPARATOR); } br.close(); br = new BufferedReader(new InputStreamReader(errIn, "UTF-8")); sb.append("Error output:").append(LINE_SEPARATOR); while ((str = br.readLine()) != null) { sb.append(str).append(LINE_SEPARATOR); } return sb.toString(); } finally { closeReaders(br); if (session != null) { session.close(); } } } private static void closeReaders(Reader... readers) { if (readers == null) { return; } for (Reader reader : readers) { try { reader.close(); } catch (IOException e) { //Ignore } } } }
相关推荐
在Java编程中,有时我们需要实现一个功能,即通过代码远程登录Linux服务器并执行特定的Linux命令。这在自动化运维、远程脚本执行等场景中非常常见。本篇将详细讲解如何实现这一目标,并提供相关源码及jar包。 首先...
在Java编程中,执行远程Linux服务器命令是一项常见的需求,特别是在自动化运维、远程管理或集成测试等场景下。本文将深入探讨如何使用Java实现这一功能,同时结合提供的标签"源码"和"工具"来理解其背后的实现原理和...
Java Swing 客户端是一种基于Java的图形用户界面(GUI)工具包,它允许开发者创建桌面应用...通过对这些源代码的分析和学习,可以深入了解如何将Java Swing与远程Linux系统结合,以及Java网络编程和SSH操作的相关知识。
根据给定的信息,本文将详细解释如何通过Java应用程序实现对Linux服务器的远程登录,并执行相应的命令。本案例中,我们采用的是Ganymed SSH2库来实现这一功能。 ### 一、Ganymed SSH2 库简介 Ganymed SSH2 是一个...
本方法是用java语言写的一个方法,可以远程连接linux系统,并在自己想要的正确的运行目录下去执行自己想要执行的正确的命令;java语言可以直接将此方法放入服务层调用。
java代码执行linux系统命令
常见的办法是通过本地工具(例如 Putty)连接远程计算机,输入命令执行,但是当遇到需要集成这些任务到代码或者开发、测试框架中时,往往就没有很好的解决方案了。sshxcute 就是这样一个框架工具集,它基于 JSCH ...
在实际项目中,为了提高代码的可维护性和复用性,通常会将SSH连接和命令执行封装成一个工具类,以便在多个地方调用。SSHXCUTE.jar简化了Java开发中的SSH操作,使得远程执行Linux命令变得更加便捷和安全。
本篇将详细探讨如何使用Java来实现Linux系统的远程拷贝功能。 首先,要实现Linux的远程拷贝,我们需要用到Java的SSH(Secure Shell)库,例如JSch。JSch是Java的一个开源库,提供了SSH2协议的实现,允许我们通过SSH...
Java应用程序远程登录Linux并执行命令是Java开发中一个常见的需求,例如在自动化运维、云计算、DevOps等领域都需要使用远程登录和命令执行技术。下面我们将详细介绍Java应用程序远程登录Linux并执行命令的实现原理和...
在Java编程中,有时我们需要与操作系统进行交互,执行系统级别的命令,例如在控制台执行CMD命令或者通过SSH连接远程Linux服务器执行shell命令。这在自动化脚本、系统管理或者远程监控等场景中非常常见。本篇文章将...
Expect4j库模仿了Unix的"expect"工具,使得程序能够自动发送输入,匹配输出,从而实现与远程Linux系统的自动化交互。在这个场景下,程序接收到AMQ的消息后,会利用expect4j库建立SSH连接到目标Linux服务器,然后执行...
在上述代码中,`RemoteAccessData.java`可能是一个包含了此类的源文件,它演示了如何利用jcifs库下载远程Linux服务器上的文件。首先,创建一个`SmbFile`对象,传入远程文件的路径以及认证信息。然后,打开本地和远程...
Java的“一次编写,到处运行”特性使得Java程序可以在任何支持Java的平台上运行,包括Linux。Java Web应用通常由Servlets、JSP(JavaServer Pages)和框架(如Spring、Struts等)组成,提供动态网页服务。 SSH...
Java中常用的Linux命令 Linux命令是Java开发中不可或缺的一部分,掌握这些命令可以提高开发效率和解决问题的能力。本文总结了常用的Linux命令,涵盖文件管理、进程管理、网络管理、文件传输和其他方面。 文件管理 ...
综上所述,Java远程连接Linux服务器并执行命令及上传文件功能的实现,不仅涉及了网络编程的技术细节,还需要考虑线程安全和并发控制。通过引入JSch和Apache Commons Logging库,我们能够构建出一个稳定可靠且安全的...
在Java开发中,有时我们需要通过程序自动化执行远程Linux服务器上的命令。JSCH(JSch是Java Secure Channel的缩写)是一个纯Java实现的SSH2库,它可以让你连接到SSH服务器,执行命令,甚至进行文件传输。本文将详细...
本资源主要内容包括(资源有保证,都是干货,一看就会): ...2.JAVA传参调用KETTLE远程服务执行任务实现过程及注意事项说明。 3.附件包括:配套说明文档、代码包、KETLLE任务测试文件及数据库脚本。
本篇文章将深入探讨如何使用Java来实现对Linux服务器的文件上传、操作、下载和删除,以及如何借助ganymed-ssh2库实现远程操作。 首先,让我们了解基础概念。Linux服务器是一种基于Linux操作系统并提供网络服务的...