java使用JSch连接服务器实现命令交互

简介: 这里通过jsch远程连接linux服务器,并在控制台实现命令的交互。

1、通过maven引入jsch

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

2、代码编写

这里通过jsch远程连接linux服务器,并在控制台实现命令的交互。

(1)创建MyUserInfo

创建UserInfo类,实现UserInfo接口(必须)、UIKeyboardInteractive接口(可选)。将public boolean promptYesNo(String s)方法的返回值更改为true。

public class MyUserInfo implements UserInfo, UIKeyboardInteractive {
    @Override
    public String getPassphrase() {
        return null;
    }
    @Override
    public String getPassword() {
        return null;
    }
    @Override
    public boolean promptPassword(String s) {
        return false;
    }
    @Override
    public boolean promptPassphrase(String s) {
        return false;
    }
    /*====这里====*/
    @Override
    public boolean promptYesNo(String s) {
        //return false;
        return true;
    }
    @Override
    public void showMessage(String s) {
    }
    @Override
    public String[] promptKeyboardInteractive(String s, String s1, String s2, String[] strings, boolean[] booleans) {
        return null;
    }
}

(2)创建Shell类连接服务器

public class Shell {
    /**
     *
     * @param host 服务器ip地址
     * @param username 用户名
     * @param password 密码
     * @param port 端口
     */
    public void show(String host,String username,String password,int port){
        try {
            //1、创建JSch对象
            JSch jSch = new JSch();
            //2、设置连接服务器参数
            //用户名、主机ip、端口 获取session
            Session session = jSch.getSession(username, host, port);
            //设置密码
            session.setPassword(password);
            //设置用户信息(必须)
            session.setUserInfo(new MyUserInfo());
            //设置session连接超时时间
            session.connect(30000);
            //3、设置操作服务器的方式
            //采用shell方式(即命令交互)
            Channel channel = session.openChannel("shell");
            //命令从控制台输入
            channel.setInputStream(System.in);
            //显示信息从控制台输出
            channel.setOutputStream(System.out);
            //设置命令执行超时时间
            channel.connect(3*1000);
        } catch (JSchException e) {
            e.printStackTrace();
        }
    }
}

(3)启动

启动前确保linux服务器22端口开启。

public class AppMain {
    public static void main(String[] args) throws InterruptedException {
        String username="root";//用户名
        String host="100.100.100.100";//ip地址
        int port=22;//端口  22端口,即为ssh应用端口,远程连接端口
        String password="123456789";//密码
        Shell shell = new Shell();
        shell.show(host,username,password,port);
    }
}

3、测试结果

当main函数启动后,就可以将控制台当成shell进行linux命令交互。

2345_image_file_copy_498.jpg


相关文章
|
2月前
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
244 17
|
3月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
463 21
|
4月前
|
Arthas 存储 监控
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
220 8
|
5月前
|
JSON API 数据安全/隐私保护
使用curl命令在服务器上执行HTTP请求
总的来说,curl是一个非常强大的工具,它可以让你在命令行中发送各种类型的HTTP请求。通过学习和实践,你可以掌握这个工具,使你的工作更加高效。
388 30
|
6月前
|
Java Linux 定位技术
Minecraft配置文件参数说明(JAVA服务器篇)
Minecraft JAVA版服务器启动后会生成server.properties配置文件,位于minecraft_server/根目录下。该文件包含多项关键设置,如游戏模式(gamemode)、最大玩家数(max-players)、难度(difficulty)等。此文档详细说明了各配置项的功能与默认值,帮助用户高效管理服务器环境。
1485 60
|
6月前
|
弹性计算 人工智能 运维
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
阿里云操作系统控制台提供了便捷的服务器监控与管理功能,简化了运维工作。通过将多台服务器纳入统一监控平台,用户可以快速查看CPU、内存、磁盘和网络等关键资源的使用情况,避免了逐一远程连接查询的繁琐操作。此外,该工具支持自动化数据汇总,极大地方便了日报、周报和月报的编写。测试过程中,系统展示了良好的稳定性和响应速度,尤其在网络抖动和大文件健康状态测试中表现出色。整体体验流畅,显著提升了运维效率。 操作系统控制台地址:[点击访问](https://alinux.console.aliyun.com/)
176 26
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
|
6月前
|
Java 网络安全 Apache
SshClient应用指南:使用org.apache.sshd库在服务器中执行命令。
总结起来,Apache SSHD库是一个强大的工具,甚至可以用于创建你自己的SSH Server。当你需要在服务器中执行命令时,这无疑是非常有用的。希望这个指南能对你有所帮助,并祝你在使用Apache SSHD库中有一个愉快的旅程!
352 29
|
5月前
|
监控 数据可视化 Java
调试技巧 - 用Linux命令排查Java问题
总的来说,使用Linux命令来排查Java问题,需要一定的实践经验和理论知识。然而,只要我们愿意花时间深入了解这些工具,我们就能够熟练地使用它们来分析和解决问题。此外,这些工具只是帮助我们定位问题,真正解决问题需要我们对Java和JVM有深入的理解,并能够读懂和分析代码。
336 13
|
6月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
6月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
404 17

热门文章

最新文章