码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-09-15 20:07:33      阅读:824      评论:0      收藏:0      [点我收藏+]

标签:

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");
    }

 

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

标签:

原文地址:http://www.cnblogs.com/pixy/p/4810422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!