• JAVA中使用JSch库实现SSH功能


    一、简介

      JSch库可以实现Java连接Linux服务器并操作命令、文件等,支持常用的各种授权模式。网址:http://www.jcraft.com/jsch/

      类似C#中的SSH.Net框架。在Java中,类似的库还有:Apache Mina SSHD  http://mina.apache.org/sshd-project/

    二、案例

      1、新建Maven项目,在pom.xml中添加下列依赖:

        <dependencies>
            <!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
            <dependency>
                <groupId>com.jcraft</groupId>
                <artifactId>jsch</artifactId>
                <version>0.1.55</version>
            </dependency>
        </dependencies>

      2、创建类ShellTest,内容如下:

    package com.test;
    
    import com.jcraft.jsch.*;
    
    import javax.swing.*;
    import java.io.FilterInputStream;
    import java.io.IOException;
    
    /**
     * @author Sindrol 2020/3/10 11:16
     */
    public class ShellTest {
    
        public static void main(String[] args) throws JSchException {
            JSch jsch = new JSch();
            //jsch.setKnownHosts("C:\Users\XXX\.ssh\known_hosts");
            String host = JOptionPane.showInputDialog("Enter hostname", "192.168.213.134");
            int port = 22;
            String user = "root";
            Session session = jsch.getSession(user, host, 22);
            String passwd = JOptionPane.showInputDialog("Enter password", "123456");
            session.setPassword(passwd);
            session.setUserInfo(new MyUserInfo());
            session.connect(30000);
            Channel channel = session.openChannel("shell");
            //((ChannelShell)channel).setAgentForwarding(true);
            //使用Window的问题
            channel.setInputStream(new FilterInputStream(System.in) {
                @Override
                public int read(byte[] b, int off, int len) throws IOException {
                    return in.read(b, off, (len > 1024 ? 1024 : len));
                }
            });
            //channel.setInputStream(System.in);
            channel.setOutputStream(System.out);
            //去除控制台彩色输出
            ((ChannelShell) channel).setPtyType("vt102");
            //((ChannelShell) channel).setEnv("LANG", "zh_CN");
            channel.connect(3 * 1000);
        }
    
        public static class MyUserInfo implements UserInfo, UIKeyboardInteractive {
            @Override
            public String getPassword() {
                return null;
            }
    
            @Override
            public boolean promptYesNo(String message) {
                Object[] options = {"yes", "no"};
                int foo = JOptionPane.showOptionDialog(null,
                        message,
                        "Warning",
                        JOptionPane.DEFAULT_OPTION,
                        JOptionPane.WARNING_MESSAGE,
                        null, options, options[0]);
                return foo == 0;
            }
    
            @Override
            public String getPassphrase() {
                return null;
            }
    
            @Override
            public boolean promptPassphrase(String message) {
                return false;
            }
    
            @Override
            public boolean promptPassword(String message) {
                return false;
            }
    
            @Override
            public void showMessage(String message) {
                JOptionPane.showMessageDialog(null, message);
            }
    
            @Override
            public String[] promptKeyboardInteractive(String destination,
                                                      String name,
                                                      String instruction,
                                                      String[] prompt,
                                                      boolean[] echo) {
                return null;
            }
        }
    }

      3、直接运行(或者打成Jar后在cmd窗口中运行)效果

       

       

      

      

      

  • 相关阅读:
    【转】ASP.NET MVC 使用 FluentScheduler 定时器计划任务
    【转】prototype扩展的JavaScript常用函数库
    【转】JavaScript系列文章:自动类型转换
    【转】Open Live Writer 插件更新
    highcharts与highstock实例
    SQL SERVER数据类型与C#数据类型对照表
    Highcharts在IE中不能一次性正常显示的一种解决办法
    MIME类型大全
    几种工具反编译被编译好的DLL文件
    MySQL之数据库的操作
  • 原文地址:https://www.cnblogs.com/songxingzhu/p/12454976.html
Copyright © 2020-2023  润新知