Java ssh库:Apache sshd库和JSch库(Java Secure Channel)

1.Apache sshd

Apache sshd是一个SSH协议的100%纯Java库,支持客户端和服务器。sshd库基于Apache MINA项目(可伸缩高性能的异步IO库)。官方网站:http://mina.apache.org/sshd-project/documentation.html

客户端示例代码:

    public void clentTest() throws IOException
    {
        String cmd="ifconfig";
        SshClient client=SshClient.setUpDefaultClient();
        client.start();
        ClientSession session=client.connect("bellring", "10.2.48.179", 22).await().getSession();
        session.addPasswordIdentity("bellring");
        if(!session.auth().await().isSuccess())
            System.out.println("auth failed");

        ChannelExec ec=session.createExecChannel(cmd);
        ec.setOut(System.out);
        ec.open();
        ec.waitFor(ClientChannel.CLOSED, 0);
        ec.close();

        client.stop();
    }
    public void sshdClientSftpTest() throws IOException, InterruptedException
    {
        Path src=Paths.get("src_sshd.txt");
        Files.deleteIfExists(src);
        Files.createFile(src);
        Files.write(src, "adsfa\nsdfs".getBytes());

        SshClient client=SshClient.setUpDefaultClient();
        client.start();
        ClientSession session=client.connect("bellring", "10.2.48.179", 22).await().getSession();
        session.addPasswordIdentity("bellring");
        if(!session.auth().await().isSuccess())
            System.out.println("auth failed");

        SftpClient sftp=session.createSftpClient();

        for(DirEntry de:sftp.readDir("."))
            System.out.println(de.filename+" "+de.attributes.type);

        OutputStream os=sftp.write("test/dst_sshd.txt");
        Files.copy(src, os);
        os.close();

        //sftp.remove("delete_file.txt");

        InputStream is=sftp.read("test/dst_sshd.txt");
        Path dst=Paths.get("dst1_sshd.txt");
        Files.deleteIfExists(dst);
        Files.copy(is, dst);
        is.close();

        sftp.close();
        client.stop();
    }

服务器端示例代码:

    public void serverTest() throws IOException, InterruptedException
    {
        SshServer sshd = SshServer.setUpDefaultServer();
        sshd.setPort(22);

        //*give host key generator a path, when sshd server restart, the same key will be load and used to authenticate the server
        sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(Paths.get("hostkey.ser")));

        sshd.setPasswordAuthenticator(new PasswordAuthenticator(){
            @Override
            public boolean authenticate(String username, String password, ServerSession session) {
                System.out.println("authen:  user="+username+"  password="+password);
                if("bellring".equals(username) && "123456".equals(password))
                    return true;
                return false;
            }});

        //use file ~/.ssh/authorized_keys
        sshd.setPublickeyAuthenticator(new DefaultAuthorizedKeysAuthenticator(false));

        //* CommandFactory can be userd in addition to the ShellFactory,
        //*  it can also be used instead of the ShellFactory.
        //*  The CommandFactory is used when direct commands are sent to the SSH server,
        //*  as this is the case when running ssh localhost shutdown or scp xxx
        ScpCommandFactory scpCmdFactory=new ScpCommandFactory();
        scpCmdFactory.setDelegateCommandFactory(new CommandFactory() {
             public Command createCommand(String command) {
                 System.out.println("command = \"" + command + "\"");
                 return new ProcessShellFactory(("cmd /c "+command).split(" ")).create();
              }
        });
        sshd.setCommandFactory(scpCmdFactory);

        sshd.start();
    }

2.JSch(Java Secure Channel)

jsch也是SSH2的纯Java实现。依赖于JavaTm Cryptography Extension(JCE)。JSch支持客户端。

官网:http://www.jcraft.com/jsch/

示例:http://www.jcraft.com/jsch/examples/

客户端远程命令执行示例:

    public void testJschClient() throws JSchException, InterruptedException
    {
        JSch jsch=new JSch();
        Session session=jsch.getSession("bellring", "10.2.48.179", 22);
        session.setConfig("StrictHostKeyChecking", "no");

        //set auth info interactively
        //session.setUserInfo(new UserInfo(){.....});

        session.setPassword("bellring");
        session.connect();

        com.jcraft.jsch.ChannelExec ec=(com.jcraft.jsch.ChannelExec)session.openChannel("exec");
        ec.setCommand("ifconfig");
        ec.setInputStream(null);
        ec.setErrStream(System.err);
        ec.setOutputStream(System.out);
        ec.connect();

        while(!ec.isClosed())
            Thread.sleep(500);

        ec.disconnect();
        session.disconnect();
    }

sftp文件操作示例

    public void testJschSftp() throws JSchException, InterruptedException, SftpException, IOException
    {
        JSch jsch=new JSch();
        Session session=jsch.getSession("bellring", "10.2.48.179", 22);
        session.setConfig("StrictHostKeyChecking", "no");

        //set auth info interactively
        //session.setUserInfo(new UserInfo(){.....});

        session.setPassword("bellring");
        session.connect();

        com.jcraft.jsch.ChannelSftp sftpChannel=(com.jcraft.jsch.ChannelSftp)session.openChannel("sftp");
        sftpChannel.connect();

        Path src=Paths.get("src.txt");
        Files.deleteIfExists(src);
        Files.createFile(src);
        Files.write(src, "adsfasdfs".getBytes());

        Vector vector=sftpChannel.ls(".");
        for(Object obj: vector)
            System.out.println(obj);

        sftpChannel.cd("test");
        sftpChannel.put("src.txt", "dst.txt");
        sftpChannel.get("dst.txt", "dst1.txt");
        sftpChannel.rm("dst.txt");

        sftpChannel.disconnect();
        session.disconnect();
        System.out.println("done");
    }
时间: 2024-10-12 19:53:52

Java ssh库:Apache sshd库和JSch库(Java Secure Channel)的相关文章

java SSH框架 SSM框架 SSI框架 源码 Java全新高大尚HTML5 bootstrap后台框架源码

获取[下载地址 (劳动所得,不喜勿喷)] [免费支持更新]A 代码生成器(开发利器);全部是源码     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用 Java

java SSH框架 SSM框架 SSI框架 源码 Java全新高大尚HTML5

获取[下载地址]   QQ: 313596790   [免费支持更新]支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]A 代码生成器(开发利器);      增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid

SELINUX设为Disable 影响java SSH工具包Jsch 0.1.49.jar的一个案例

最近项目中遇到一个典型事件,当RHEL 的SELINUX设为DISABLE时 使用JAVA的Jsch 库调用SSH命令时将随机返回空字符串,我使用的版本是0.1.49,最新版本0.1.51未测试. 关于Jsch: http://www.jcraft.com/jsch/ 为此,我特意写了一个程序测试: package com.ibm.leo; import com.ibm.gts.cms.common.guestssh.api.GuestSshServiceFactory; import com.

SFTP信任公钥配置及JSCH库

1.SFTP信用公钥配置 1.1 客户端生成密钥对 以DSA举例: ssh-keygen –t dsa 执行该命令后,在home/用户名/.ssh目录下,会生成id_dsa和id_dsa.pub两个文件 1.2 将id_dsa.pub公钥文件上传至服务端的home/用户名/.ssh目录下 scp id_dsa.pub 用户名@服务端IP:/home/用户名/.ssh 此时还需要输入密码 1.3服务端添加信任公钥 登录服务端,进入到/home/用户名/.ssh目录,将刚刚拷贝的id_dsa.pub

CSDN日报20170320——《Java 程序员的面试经历和题库》

[程序人生]Java 程序员的面试经历和题库 作者:nuaazhaofeng 最近打算换城市了,受不了北京的雾霾了,所以准备逃离啦.所以一直在面试中,整理了下最近遇到的一些面试题,供大家参考.其中会包含一些面试的小经验,如果您是面霸,希望能给予指导.自己不是大牛,如果您是大牛,也可以忽略之.我面试的岗位是Java后端开发工程师. [Python]7行Python代码的人脸识别 作者:半吊子全栈工匠 随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿.AI涉及的领域众多,图像识别中的

JAVA程序员一定知道的优秀第三方库(2016版)

几乎每个程序员都知道要“避免重复发明轮子”的道理——尽可能使用那些优秀的第三方框架或库,但当真正进入开发时,我却经常发现他们有时并不知道那些轮子在哪里.最近,我在业余时间带几个年轻的程序员一起做了一个很小的商业项目,而在一起开发的过程中,我几乎在所有需要判断字符串是否为空的地方,看到了下面的代码: if(inputString == null || inputString.length == 0){......} 1 除了字符串判断是否为空之外,还有很多字符串处理或其他数据类型判断的方法,缺少经

[转]JAVA程序员一定知道的优秀第三方库(2016版)

原文地址:http://blog.csdn.net/zxc123e/article/details/51418163 几乎每个程序员都知道要“避免重复发明轮子”的道理——尽可能使用那些优秀的第三方框架或库,但当真正进入开发时,我却经常发现他们有时并不知道那些轮子在哪里.最近,我在业余时间带几个年轻的程序员一起做了一个很小的商业项目,而在一起开发的过程中,我几乎在所有需要判断字符串是否为空的地方,看到了下面的代码: if(inputString == null || inputString.len

Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. JSTL标签库,是由一些Java类组成的. JSTL组成: JSTL –Core 核心标签库. 重点 JSTL – I18N - 国际化标签库.Internationalization- I18N JSTL – SQL – 数据库操作标签(有悖于MVC设计模式),现在都不用这个. JSTL - Fu

Java框架JNA调用C方法(windows链接库dll文件、linux链接库so文件)

介绍 给大家介绍一个最新的访问本机代码的Java框架-JNA. JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架. JNA项目地址:https://jna.dev.java.net/ 非常强大.易用,功能上类似与.NET的P/Invoke. 不堪回首的JNI 我们知道,使用JNI调用.dll/.so共享类库是非常非常麻烦和痛苦的. 如果有一个现有的.dll/.so文件,如果使用JNI技术调用,我们首先需要另