`
一条路一个人
  • 浏览: 26224 次
  • 性别: Icon_minigender_1
  • 来自: 定州市
社区版块
存档分类
最新评论

远程执行服务器端命令程序(jsch实现)

    博客分类:
  • jsch
阅读更多

        通过jsch可以实现基于sftp协议的文件传输,使用的是ChannelSftp类,如果要在程序中实现启动服务器的一个脚本,执行某个系统命令的话,就需要用到另一个channel类了,就是ChannelExec类。

        如果项目采用maven构建的话,引入

<dependency>
      <groupId>com.jcraft</groupId>
      <artifactId>jsch</artifactId>
      <version>0.1.50</version>
</dependency>

 

        代码示列:

package com.lipl;

import com.jcraft.jsch.*;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;

/**
 * @author lipenglong
 * @ClassName:
 * @Description: this is a class desc.
 * @date 14-4-1 上午10:44
 */
public class JschCommand {
    private Session session = null;
    private Channel channel = null;

    private String sftpHost = "localhost";
    private int sftpPort = 22;
    private String sftpUserName = "petric";
    private String sftpPassword = "123";
    private int timeout = 30000;

    /**
     * 获取连接
     * @return
     */
    private ChannelExec getChannelExec() {
        try {
            if (channel != null && channel.isConnected()) {
                return (ChannelExec) channel;
            }
            JSch jSch = new JSch();
            if (session == null || !session.isConnected()) {
                session = jSch.getSession(sftpUserName, sftpHost, sftpPort);
                session.setPassword(sftpPassword);
                Properties config = new Properties();
                config.put("StrictHostKeyChecking", "no");
                session.setConfig(config);
                session.setTimeout(timeout);
                session.connect();
            }
            channel = session.openChannel("exec");
        } catch (Exception e) {
            if (session != null) {
                session.disconnect();
                session = null;
            }
            channel = null;
        }
        return channel == null ? null : (ChannelExec) channel;
    }

    /**
     * 关闭连接
     */
    private void closeChannel() {
        try {
            if (channel != null) {
                channel.disconnect();
                channel = null;
            }
            if (session != null) {
                session.disconnect();
                session = null;
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    /**
     * 执行服务器端命令
     */
    public boolean executeCommand(String command) {
        boolean flag = false;
        ChannelExec channelExec = getChannelExec();
        if (channelExec == null) {
            return false;
        }
        try {
            channelExec.setInputStream(null);
            channelExec.setErrStream(System.err);
            channelExec.setCommand(command);

            InputStream in = channelExec.getInputStream();
            channelExec.connect();

            BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf-8"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            reader.close();
            closeChannel();

            flag = true;
        } catch (Exception e) {
            System.out.println(e);
            flag = false;
        }
        return flag;
    }

    public static void main(String[] args) {
        JschCommand jschCommand = new JschCommand();
        System.out.println(jschCommand.executeCommand("date"));
        System.out.println("----------------------------------");
        System.out.println(jschCommand.executeCommand("ruby Demo.rb"));
        System.out.println("----------------------------------");
        System.out.println(jschCommand.executeCommand("touch abc.txt"));
        System.out.println("----------------------------------");
        System.out.println(jschCommand.executeCommand("rm abc.txt"));
    }
}

 

通过ChannelExec类可以实现执行服务器命令,如date, touch, rm等,可以执行服务器上我们写好的某个脚本,如Demo.rb。

分享到:
评论

相关推荐

    亲测有效,jsch-0.1.54.jar

    JSch是一个开源项目,它允许Java开发者在应用程序中执行远程操作,如文件传输、命令执行等。版本号"0.1.54"表示这是该库的一个特定发行版,可能包含了性能优化、bug修复或新功能。 **SFTP与SSH** SFTP是基于SSH的...

    升级jsch包解决ssh升级后jschexception:algorithm negotiation fail 等问题

    JSCH(Java Simple SSH)是一个用Java编写的库,它实现了SSH2协议,允许Java应用程序进行加密的通信,如执行远程命令、文件传输等。然而,随着网络安全标准的不断提升,SSH的加密算法也在不断更新,这可能导致旧版本...

    远程控制java实现

    在 Java 中,可以通过 JSch 库来实现 SSH 客户端的功能,例如执行远程命令、传输文件等。SSH 提供了身份验证和数据加密,确保了远程控制过程的安全性。 在实际应用中,我们可能需要结合这些技术来实现更复杂的远程...

    JAVA代码实现远程服务器的文件操作步骤及JAR包

    JSch库提供了一个API,允许开发者编写代码来执行SCP命令。下面是一个简单的示例,展示如何使用JSch上传文件到远程服务器: ```java import com.jcraft.jsch.*; public class ScpToServer { public static void ...

    Java实现Linux的远程拷贝

    通过JSch,我们可以建立SSH会话,执行`sftp`(Secure File Transfer Protocol)命令,从而实现文件的远程拷贝。 4. **文件操作**: Java的`java.io`和`java.nio`包提供了丰富的文件操作API。在远程拷贝过程中,...

    SSH2示例程序

    SSH2示例程序通常是指使用SSH2协议开发的客户端或服务器端应用程序,用于实现加密的数据传输、命令执行、文件传输等功能。在IT领域,SSH2因其强大的安全性和可靠性而被广泛应用。 SSH2协议的核心特性包括: 1. **...

    ssh(dwr).rar_DWR SSH_dwr_java dwr_ssh_ssh dwr

    这个整合能够帮助开发者在远程服务器上执行命令,或者通过DWR调用Java服务,然后通过SSH传输数据,实现更强大的功能。 首先,SSH整合的关键在于使用Java的SSH库,如JSch。JSch是一个纯Java实现的SSH2库,可以用于...

    ssh-lib.rar

    这个"ssh-lib.rar"压缩包显然包含了与SSH相关的Java库(jar包),这些库通常用于开发支持SSH协议的应用程序,例如在服务器之间进行安全的数据传输、远程执行命令等。 在Java开发中,SSH库主要分为两类:一类是实现...

    telnet ssh jar

    `SSH`是一种加密网络协议,用于安全地远程登录、执行命令以及传输文件。它的工作原理包括身份验证、加密算法以及会话复用等机制,确保了通信的安全。`SSH`客户端和服务器端都需要特定的软件支持,其中`jar`文件...

    java源码:Java远程终端工具 JTA.rar

    1. **网络通信**:利用Java的Socket编程或者NIO(非阻塞I/O)实现客户端和服务器端的通信,确保数据的实时传输和交互。 2. **SSH协议**:为了安全地连接到远程服务器,可能会采用SSH(Secure Shell)协议,通过Java...

    开发SSH2的完整jar包

    3. **Apache SSHD**:SSHD是Apache软件基金会的一个项目,它提供了一个完全实现了SSH2协议的服务器端和客户端组件。开发者可以利用这个库来构建自己的SSH服务。 4. **Bouncy Castle**:Bouncy Castle是一个Java安...

    用于ssh文件同步,kotlin

    Apache SSHD是另一个可选的SSH实现,它提供了服务器端和客户端的功能。在Kotlin中使用Apache SSHD,可以创建一个SSH服务器并实现自定义的文件传输协议处理。 至于如何实现文件同步,这通常涉及到监控本地文件系统的...

    ssh实例 java

    在Java中,JSch库提供了这些功能的实现,使得开发者能够通过Java程序与远程服务器进行交互,例如执行命令、传输文件等。 JSch库的使用步骤大致如下: 1. **初始化JSch对象**:`JSch jsch = new JSch();` 2. **设置...

    ext ssh demo

    它允许用户通过不安全的网络连接安全地访问远程服务器,执行命令、管理文件等操作。SSH的核心特性包括公钥认证、数据加密以及防止中间人攻击。在Web开发中,SSH可以帮助开发者进行远程部署、自动化脚本执行和其他...

    SSH2例子程序,已调试

    学习如何使用这些工具进行文件传输、远程执行命令等操作是实际应用的一部分。 7. **API使用**:对于开发者来说,了解如何使用SSH2相关的编程库(如Java的JSch,Python的paramiko等)来创建自定义的应用程序是非常有...

    blog.zip_blog_blog ssh

    对于Java开发者来说,SSH可以用于自动化部署、版本控制(如Git通过SSH链接)以及远程执行命令。例如,使用Jsch库,Java程序可以直接建立SSH连接,执行远程脚本,进行文件传输等操作。Jsch库提供了丰富的API,能够...

    ssh相关jar包(1)

    MINA为开发高性能和稳定的网络应用程序提供了基础架构,如SSH服务器端实现。 在开发过程中,引入SSH相关jar包时,需要确保版本的兼容性,因为不同版本的库可能会有API的变更或者不兼容性问题。同时,正确配置公钥...

    Andrtoid+ssh(向服务器提交数据)

    JSch是一个Java实现的SSH2库,它提供了客户端和服务器端的实现。将JSch库添加到Android项目的依赖中,可以通过Gradle添加如下代码: ```groovy implementation 'com.jcraft:jsch:0.1.55' ``` 2. **配置SSH连接**...

    Ext+ssh+sybase增删改

    使用Python的paramiko库或者Java的JSch库可以实现SSH连接和命令执行。 Sybase数据库管理系统的使用涉及到SQL语言,它是用于查询、操作和管理关系数据库的标准语言。在EXTJS应用中,增(INSERT)、删(DELETE)、改...

    基于ssh实现的一个小书签

    - 使用Java的JSch库来实现SSH连接和命令执行。JSch库提供了连接、认证、文件传输等功能。 - 通过SSH隧道执行SQL命令或操作文件系统,实现书签的CRUD操作。 5. **书签的增删改查操作** - **增加书签**:通过SSH...

Global site tag (gtag.js) - Google Analytics