🍏使用Java访问Linux服务器,并执行命令

一、引入依赖

1
2
3
4
5
6
<!--Java连接Linux服务器依赖-->
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

二、使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.zhixi;
 
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
 
import java.io.InputStream;
 
public class SSHExample {
    public static void main(String[] args) {
        String host = "xxx"; // 远程服务器IP地址
        String user = "root"; // 远程服务器用户名
        String password = "xxx"; // 远程服务器密码
        // 要执行的命令
        StringBuilder command = new StringBuilder("pwd;");
        command.append("ls -la;");
 
        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession(user, host, 22); // 创建一个SSH会话
            session.setPassword(password); // 设置会话密码
            session.setConfig("StrictHostKeyChecking", "no"); // 设置会话配置
            session.connect(); // 连接会话
 
            Channel channel = session.openChannel("exec"); // 打开一个exec通道
            ((ChannelExec) channel).setCommand(command.toString()); // 设置要执行的命令
            channel.setInputStream(null);
            ((ChannelExec) channel).setErrStream(System.err); // 设置错误输出流
 
            InputStream inputStream = channel.getInputStream();
            channel.connect(); // 连接通道
 
            byte[] buffer = new byte[1024];
            while (true) {
                while (inputStream.available() > 0) {
                    int i = inputStream.read(buffer, 0, 1024);
                    if (i < 0) break;
                    System.out.print(new String(buffer, 0, i)); // 输出结果到控制台
                }
                if (channel.isClosed()) {
                    if (inputStream.available() > 0) continue;
                    System.out.println("exit-status: " + channel.getExitStatus()); // 输出退出状态
                    break;
                }
                try {
                    Thread.sleep(1000);
                } catch (Exception ee) {
                } // 等待一秒钟
            }
            channel.disconnect(); // 断开通道
            session.disconnect(); // 断开会话
        } catch (Exception e) {
            e.printStackTrace(); // 输出错误信息
        }
    }
}

posted @   Java小白的搬砖路  阅读(515)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
历史上的今天:
2021-03-03 二叉排序树的添加与删除

喜欢请打赏

扫描二维码打赏

支付宝打赏

点击右上角即可分享
微信分享提示