1. pom.xml
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.50</version> </dependency>
2.
package xxxxx; import java.io.InputStream; import java.util.Vector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.ChannelSftp.LsEntry; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpException; import com.jcraft.jsch.UserInfo; public class JschShellUtil { private final Logger LOGGER = LoggerFactory.getLogger(JschShellUtil.class); private String host; private String user; private String password; private int port; private int maxWaitTime; private String keyfile; private String passphrase; private boolean sshKey; private ChannelSftp sftp; private ChannelExec exec; private Session session; public JschShellUtil(String host, String user, String password, int port, int maxWaitTime) { this.host = host; this.user = user; this.password = password; this.port = port; this.maxWaitTime = maxWaitTime; this.keyfile = null; this.passphrase = null; this.sshKey = false; } public JschShellUtil(String host, String user, int port, int maxWaitTime, String keyfile, String passphrase) { this.host = host; this.user = user; this.password = null; this.port = port; this.maxWaitTime = maxWaitTime; this.keyfile = keyfile; this.passphrase = passphrase; this.sshKey = true; } public void open() throws JSchException { JSch client = new JSch(); if (sshKey && keyfile != null && keyfile.length() > 0) { client.addIdentity(this.keyfile, this.passphrase); } session = client.getSession(this.user, this.host, this.port); session.setUserInfo(new UserInfo() { public String getPassphrase() { return null; } public String getPassword() { return password; } public boolean promptPassphrase(String arg0) { return true; } public boolean promptPassword(String arg0) { return true; } public boolean promptYesNo(String arg0) { return true; } public void showMessage(String arg0) { } }); session.setTimeout(maxWaitTime); session.connect(); Channel channel = session.openChannel("sftp"); channel.connect(); sftp = (ChannelSftp) channel; } public void close() { if (sftp != null) { sftp.disconnect(); sftp = null; } if (session != null) { session.disconnect(); session = null; } } public void cd(String path) throws SftpException { sftp.cd(path); } public String pwd() throws SftpException { String pwd = sftp.pwd(); LOGGER.info(sftp.pwd()); return pwd; } public void ls() throws SftpException { Vector<?> vector = sftp.ls("."); for (Object object : vector) { if (object instanceof LsEntry) { LsEntry entry = LsEntry.class.cast(object); LOGGER.info(entry.getFilename()); } } } public void ls(String path) throws SftpException { Vector<?> vector = sftp.ls(path); for (Object object : vector) { if (object instanceof LsEntry) { LsEntry entry = LsEntry.class.cast(object); LOGGER.info(entry.getFilename()); } } } public void rename(String oldPath, String newPath) throws SftpException { sftp.rename(oldPath, newPath); } public void cp(String src, String dest) throws SftpException { int lastSlash = src.lastIndexOf("/"); String srcFile = src; String srcDir = "."; if (lastSlash > -1) { srcFile = src.substring(lastSlash + 1); srcDir = src.substring(0, lastSlash); } String temp = srcDir + "/temp_" + srcFile; rename(src, temp); rename(temp, dest); } public void rm(String file) throws SftpException { sftp.rm(file); } public void mv(String src, String dest) throws SftpException { rename(src, dest); } public void rmdir(String path) throws SftpException { sftp.rmdir(path); } public void mkdir(String path) throws SftpException { sftp.mkdir(path); } public void chmod(int permissions, String path) throws SftpException { sftp.chmod(permissions, path); } /** * 执行一次shell命令,之后连接就关闭 * @param cmd * @return * @throws Exception */ public int runCmd(String cmd) throws Exception { exec = (ChannelExec) session.openChannel("exec"); exec.setCommand(cmd); exec.setInputStream(null); exec.setErrStream(System.err); InputStream in = exec.getInputStream(); exec.connect(); int res = -1; StringBuffer buf = new StringBuffer(1024); byte[] tmp = new byte[1024]; while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); if (i < 0) break; buf.append(new String(tmp, 0, i)); } if (exec.isClosed()) { res = exec.getExitStatus(); LOGGER.info("Exit-status: " + res); break; } } LOGGER.info(buf.toString()); exec.disconnect(); return res; } public static void main(String[] args) throws Exception { String host = "10.121.163.112 "; String user = "admin"; String password = "admin"; int port = 22; int maxWaitTime = 0; JschShellUtil jsch = new JschShellUtil(host, user, password, port, maxWaitTime); jsch.open(); String filename = "dubbo-demo-provider-2.5.3-assembly.tar.gz"; jsch.runCmd("cd /home/admin/vlt/dubbo-demo-provider-2.5.3/bin; ./stop.sh"); jsch.close(); } }
相关推荐
以下是如何使用JSch在Java程序中运行远程Linux主机上的shell脚本的详细步骤: 首先,你需要在项目中引入JSch的依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.jcraft</groupId> ...
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
Jsch(Java Secure Channel)是一个纯Java语言编写的库,它能够实现SSH(Secure Shell)功能。SSH是一种安全协议,它主要用于在不同的系统或服务器间建立安全的连接,并在传输数据的过程中对数据进行加密。在Java中...
总的来说,Java远程调用Shell脚本客户端包简化了开发人员在Java应用程序中集成远程系统管理操作的过程,提高了开发效率并保证了安全性。通过理解和运用上述技术,开发者能够更好地利用这个工具包实现各种复杂的远程...
在Java编程中,有时我们需要与操作系统进行交互,执行系统级别的命令,例如在控制台执行CMD命令或者通过SSH连接远程Linux服务器执行shell命令。这在自动化脚本、系统管理或者远程监控等场景中非常常见。本篇文章将...
Java使用JSCH(Java Secure Channel)库连接远程服务器是一个常见的任务,特别是在自动化运维、文件传输或者执行远程命令等场景中。JSCH是一个纯Java实现的SSH2库,它提供了连接到支持SSH协议的服务器的能力,如...
下面是一段基本的Java代码示例,展示了如何使用JSch连接到远程Linux服务器并执行一个简单的Shell命令: ```java import com.jcraft.jsch.*; public class SSHExecutor { public static void main(String[] args) ...
具体来说,开发者可能使用了Java的SSH(Secure Shell)库,如JSch或者Apache MINA,这些库提供了与远程Linux服务器安全连接并执行命令的能力。 SSH协议是一种在网络上传输数据的安全方式,通常用于远程登录、文件...
首先,要实现Linux的远程拷贝,我们需要用到Java的SSH(Secure Shell)库,例如JSch。JSch是Java的一个开源库,提供了SSH2协议的实现,允许我们通过SSH连接执行命令、传输文件等操作。在项目中引入JSch库后,我们就...
总结,通过Java执行远程Linux服务器命令主要涉及到SSH协议、JSch库的使用,以及可能的工具类库如Apache Commons Exec。这些技术在日常的系统管理和自动化任务中扮演着重要角色,帮助开发者实现远程操作和管理。
总之,通过Java操作Linux服务器并执行shell脚本,可以实现自动化运维、远程数据获取等多种功能。结合Apache Commons库,我们可以编写出高效、可靠的远程管理工具。在实际开发中,一定要注意安全性,例如使用密钥对...
首先,要实现Java远程连接Linux服务器并执行命令及上传文件的功能,通常需要借助一些第三方库。其中JSch库是一个常用的、完全用Java写成的SSH2客户端,可以帮助我们安全地连接到SSH服务器。而Apache Commons Logging...
该工具是基于SSH2协议的实现,在使用它的过程中非常容易,只需要指定合法的用户名口令,或者授权认证文件,就可以创建到远程Linux主机的连接,在建立起来的会话中调用该Linux主机上的脚本文件,执行相关操作。
在Java编程环境中,远程登录Linux系统并执行命令是一项常见的任务,尤其在自动化运维、系统管理以及分布式系统中。本文将详细讲解如何实现这一功能,并基于给出的“AutoStart”文件名,推测这是一个自动启动相关服务...
`JSch`库提供了一个这样的解决方案,它是一个纯Java实现的SSH2库,允许开发者连接到远程计算机并执行命令,传输文件等。本篇将详细介绍如何使用Java和JSch在Windows上实现对Linux服务器的文件获取。 首先,我们需要...
4. **执行远程脚本**:除了直接执行单个命令,还可以通过JSCH执行存储在远程服务器上的shell脚本。这通常涉及创建一个`Channel.exec()`通道,然后将脚本的路径作为命令传递。 在实际应用中,"synclinux"可能是一个...
在IT行业中,Java远程连接SSH是一项重要的技能,特别是在管理和维护基于Linux系统的服务器时。SSH(Secure Shell)是一种网络协议,用于安全地远程控制操作系统,执行命令,传输数据。本篇文章将详细探讨Java如何...
此外,由于JSch支持shell命令执行,因此还可以扩展到执行远程系统的各种管理任务。 **使用步骤** 1. **添加依赖**:首先,将`jsch-0.1.55.jar`文件添加到项目类路径中,如果是Maven或Gradle项目,需要在相应的构建...