`

java使用ssh2远程登录linux/windows并执行命令

    博客分类:
  • java
 
阅读更多

1、需要依赖的pom文件配置:

<dependency>
            <groupId>ch.ethz.ganymed</groupId>
            <artifactId>ganymed-ssh2</artifactId>
            <version>build209</version>
</dependency>

2、linux下远程可直接连接,windows下需要安装freeSSHd.exe;

3、安装freeSSHd.exe可以参考https://www.cnblogs.com/fuhengheng/p/8043647.html;

4、安装freeSSHd.exe不能安装有空格的地方;如果报错“the specified address is already in use” 运行services.msc停止FreeSSHDService服务;

5、java客户端连接的工作类:

package com.cn.linux.ssh;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;

public class RemoteCommandUtil
{
    private static final Logger log = LoggerFactory.getLogger(RemoteCommandUtil.class);
   
    private static String DEFAULTCHART = "UTF-8";
   
    public static Connection login(String ip, String userName, String userPwd)
    {
        boolean flg = false;
        Connection conn = null;
        try
        {
            conn = new Connection(ip);
            conn.connect();
            flg = conn.authenticateWithPassword(userName, userPwd);
            if (flg)
            {
                log.info("=========登录成功=========" + conn);
                return conn;
            }
        }
        catch (IOException e)
        {
            log.error("=========登录失败=========" + e.getMessage());
            e.printStackTrace();
        }
        return conn;
    }
   
    public static String execute(Connection conn, String cmd)
    {
        String result = "";
        try
        {
            if (conn != null)
            {
                Session session = conn.openSession();
                session.execCommand(cmd);
                result = processStdout(session.getStdout(), DEFAULTCHART);
                if (StringUtils.isBlank(result))
                {
                    log.info("得到标准输出为空,链接conn:" + conn + ",执行的命令:" + cmd);
                    result = processStdout(session.getStderr(), DEFAULTCHART);
                }
                else
                {
                    log.info("执行命令成功,链接conn:" + conn + ",执行的命令:" + cmd);
                }
                conn.close();
                session.close();
            }
        }
        catch (IOException e)
        {
            log.info("执行命令失败,链接conn:" + conn + ",执行的命令:" + cmd + "  " + e.getMessage());
            e.printStackTrace();
        }
        return result;
    }
   
    private 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)
        {
            log.error("解析脚本出错:" + e.getMessage());
            e.printStackTrace();
        }
        catch (IOException e)
        {
            log.error("解析脚本出错:" + e.getMessage());
            e.printStackTrace();
        }
        return buffer.toString();
    }
   
    public static void main(String[] args)
    {
        Connection conn = RemoteCommandUtil.login("192.168.20.240", "root", "tcrj2018");
        System.out.println(RemoteCommandUtil.execute(conn, "uname -a && date && uptime && who"));
    }
}

分享到:
评论

相关推荐

    java通过代码登录远程linux服务器并执行linux命令源码以及jar包

    在Java编程中,有时我们需要实现一个功能,即通过代码远程登录Linux服务器并执行特定的Linux命令。这在自动化运维、远程脚本执行等场景中非常常见。本篇将详细讲解如何实现这一目标,并提供相关源码及jar包。 首先...

    java应用程序远程登录linux并执行其命令

    接下来,我们将编写一个简单的Java程序来演示如何使用Ganymed SSH2库实现远程登录Linux服务器并执行命令。 #### 1. 创建Connection对象 ```java // 创建Connection实例 Connection conn = new Connection(hostname...

    java控制台输入cmd命令, ssh远程linux shell命令, 并打印命令输出到控制台

    在Java编程中,有时我们需要与操作系统进行交互,执行系统级别的命令,例如在控制台执行CMD命令或者通过SSH连接远程Linux服务器执行shell命令。这在自动化脚本、系统管理或者远程监控等场景中非常常见。本篇文章将...

    Java(通过ganymed-ssh2-build210.jar)实现SSH远程连接linux终端

    Java通过ganymed-ssh2-build210.jar库实现SSH远程连接Linux终端是一个常见的应用场景,主要用于自动化运维、系统管理或者开发过程中需要与Linux服务器交互的场景。ganymed-ssh2-build210.jar是Java的一个开源SSH库,...

    Java应用程序远程登录linux并执行其命令.pdf

    Java应用程序远程登录Linux并执行命令是Java开发中一个常见的需求,例如在自动化运维、云计算、DevOps等领域都需要使用远程登录和命令执行技术。下面我们将详细介绍Java应用程序远程登录Linux并执行命令的实现原理和...

    linux java web SSH 工具 远程

    在Linux系统中,SSH常用于远程登录、文件传输等操作,它使用加密技术确保通信的安全性。SSH Secure Shell客户端工具允许用户连接到远程服务器,执行命令,管理文件,甚至进行图形界面操作。 对于远程工作和协作,...

    Java 调用 Linux shell 命令执行框架:sshxcute

    sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...

    java开发的swing客户端,远程执行linux命令.zip

    具体来说,开发者可能使用了Java的SSH(Secure Shell)库,如JSch或者Apache MINA,这些库提供了与远程Linux服务器安全连接并执行命令的能力。 SSH协议是一种在网络上传输数据的安全方式,通常用于远程登录、文件...

    java linux ssh登陆

    总之,"Java Linux SSH登录"涉及到使用Java的JSch库与Linux系统进行安全的远程通信,执行特定的命令。提供的文件列表展示了实现这一功能的可能代码结构,包括自定义的SSH连接管理类、输入输出流处理、登录选项以及...

    ssh2.jar java linux

    在描述中提到的"java连接Linux系统远程调用"是指通过Java程序使用SSH2协议来连接到Linux服务器,执行命令或者管理文件系统。这种方式通常在自动化运维、脚本编程或者远程服务调用中非常有用。 下面我们将深入探讨...

    Java运用ganymed-ssh2-build210.jar包远程连接操作linux服务器

    本文档的标题是"Java 运用 Ganymed-SSH2 库远程连接操作 Linux 服务器",这意味着我们将使用 Java 语言来远程连接 Linux 服务器,并使用 Ganymed-SSH2 库来实现远程连接和文件传输。 描述解释 描述部分提到使用 ...

    java执行远程linux服务器命令

    首先,要实现这个功能,我们需要借助SSH(Secure Shell)协议,它提供了安全的网络服务,允许远程登录到Linux服务器并执行命令。Java中有多个库可以支持SSH连接,例如JSch和Apache SSHD。这里我们以更常用的JSch为例...

    java连接linux,执行shell命令的工具类 sshxcute.jar

    SSHXCUTE.jar是一个Java库,它允许程序员通过SSH连接到Linux系统并执行shell命令,而无需深入了解SSH的底层细节。 SSHXCUTE.jar的核心功能包括: 1. **建立SSH连接**:通过提供主机名、用户名、密码或密钥对信息,...

    ssh 远程连接Linux工具

    ssh工具 用于连接远程服务器 linux 系统 解压 安装即可使用

    面向 Java 开发与测试人员的远程执行 Linux/UNIX 系统上任务的框架 -- sshxcute 源码

    Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种 实用功能。 文档参考 https://www.ibm.com/developerworks/cn/opensource/os-sshxcute/

    java实现模拟SSH和telnet登陆(实现命令的发送和接受)

    Java 实现模拟 SSH 和 Telnet 登陆,以及发送与接收命令是网络编程中常见的需求,主要应用于自动化测试、远程系统管理或数据交换等场景。在本文中,我们将深入探讨如何利用 Java 实现这一功能。 首先,SSH(Secure ...

    解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题

    Python – paramiko 模块远程执行ssh 命令 nohup 不生效的问题解决 1、使用 paramiko 模块ssh 登陆到 linux 执行nohup命令不生效 # 执行命令 def command(ssh_config, cmd, result_print=None, nohup=False): ssh ...

    登录linux执行命令

    本程序“登录Linux执行命令”旨在实现一个自动化流程,通过连接到AMQ(Advanced Message Queuing Protocol)消息队列,被动接收消息,并在Linux环境下执行预设的指令。这一过程涉及到的主要技术包括AMQ的交互、SSH...

    java实现ssh方式连接linux(包含ganymed-ssh2-build210.jar包)

    java实现ssh方式连接linux(包含ganymed-ssh2-build210.jar包) ---------Java语言+绚丽的界面+仿ssh实现调用Linux的Terminal,实现远程连接linux进行命令行的操作!

Global site tag (gtag.js) - Google Analytics