java ssh连接linux

1. 导入依赖

<!--        test-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
<!--        ssh2-->
        <dependency>
            <groupId>ch.ethz.ganymed</groupId>
            <artifactId>ganymed-ssh2</artifactId>
            <version>262</version>
        </dependency>

2. 代码实现

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
public class ssh2 {

    public Connection login() {
        String ip = "192.168.0.1";
        String usr = "root";
        String psword = "root";
        //创建远程连接,默认连接端口为22,如果不使用默认,可以使用方法
        //new Connection(ip, port)创建对象
        Connection conn = new Connection(ip);
        try {
            //连接远程服务器
            conn.connect();
            //使用用户名和密码登录
            boolean res = conn.authenticateWithPassword(usr, psword);
            System.out.println(res);
            return conn;
        } catch (IOException e) {
            System.err.printf("用户密码登录服务器失败!", usr, psword, ip);
            e.printStackTrace();
        }
        return null;
    }

    /**
     *
     * @param conn Connection对象
     * @param cmds 要在linux上执行的指令
     */
    public int exec(Connection conn, String cmds) {
        InputStream stdOut = null;
        InputStream stdErr = null;
        int ret = -1;
        try {
            // 在connection中打开一个新的会话
            Session session = conn.openSession();
            // 在远程服务器上执行linux指令
            session.execCommand(cmds, "UTF-8");
            InputStream is = new StreamGobbler(session.getStdout());
            BufferedReader brs = new BufferedReader(new InputStreamReader(is));
            System.out.println(brs.readLine());
            InputStream is1 = new StreamGobbler(session.getStderr());
            BufferedReader brs1 = new BufferedReader(new InputStreamReader(is1));
            System.out.println(brs1.readLine());
            session.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ret;
    }

    @Test
    public void test() {
        String cmd = "service kudu-tserver status";
//        String cmd1 = "service kudu-master stop";
//        String cmd2 = "/presto/presto-server-0.253/bin/launcher stop";
        Connection conn = login();
        exec(conn, cmd);
//        Connection conn1 = login();
//        exec(conn1, cmd1);
//        Connection conn2 = login();
//        exec(conn2, cmd2);
    }
}

posted @   xiaomaixiaomai  阅读(216)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示