Jsch – Pure Java implementation of SSH2

Home AboutGuestbookCategoriesTagsLinksSubscribe

原文地址:http://geeklu.com/2010/06/jsch-pure-java-implementation-of-ssh2/

一.SSH的介绍

SSH(Secure Shell)是一种网络协议,用于互联网上不同设备之间信息的安全传输.在安全性方面其使用了公钥的加密技术.关于SSH还有一个故事,以前有一个叫做Tatu Ylönen的芬兰程序员开发了一个叫做SSH的网络协议和服务程序,后来Tatu Ylönen对SSH源码的协议进行了改变,以至于远远超出了公开源代码许可的限度.这引起了很多依赖ssh的人的不满,于是OpenBSD的开发人员便着手开发自己的SSH,于是OpenSSH便诞生了.

目前大都数的Linux中都运行着OpenSSH,为用户安全的提供远程登录管理和其他数据传输的功能.

二.JSCH的介绍

相对于C实现的openssh,今天我要说的是一个Java的SSH2实现,这样我们就可以完全通过java来调用ssh实现一些功能,比如通过jsch远程执行一些linux命令,或者通过jsch实现一个基于java的sftp客户端等等.

JSCH的官方网站http://www.jcraft.com/jsch/Maven中的坐标http://mvnrepository.com/artifact/com.jcraft/jsch/0.1.42

目前有许多项目都是用到了jsch:

Ant(1.6 or later).JSch has been used for Ant’s sshexec and scp tasks.
Eclipse(3.0).Our Eclipse-CVSSSH2 plug-in has been included in Eclipse SDK 3.0. This plug-in will allow you to get ssh2 accesses to remote CVS repository by JSch.
NetBeans 5.0(and later)
Jakarta Commons VFS
Maven Wagon
Rational Application Devloper for WebSphere Software
HP Storage Essentials
JIRA
可惜的是JSCH并没有文档,所以很多时候只能看样例代码或者自己看api文档来摸索使用.在介绍如何使用之前先看下一个必要的知识.

一个ssh的连接我们称之为一个Session,从一个建立好的Session中我们可以获取各种类型的Channel,每一种Channel的功能是不一样的.如exec通道是用来执行一个单独的命令并获得返回结果,shell远端终端方式的交互,sftp可以传输文件等,具体的通道类型可以看这里http://www.ssh.com/support/documentation/online/ssh/guardian/11/scb_ssh_channel_types.html

通常我们本机的ssh的相关文件保存在~/.ssh目录下我们可以通过ssh-keygen -t rsa 来生成一对ras类型的公私钥.

三.代码片段示例

1.初始化Session

JSch jsch = new JSch();//当然你也可以通过密码的方式进行用户的验证//密码的验证方式需要在下面使用session.setPassword("pass");jsch.addIdentity("/home/luke/.ssh/id_rsa");Session session = jsch.getSession("user", "hostname", 22);session.setConfig("StrictHostKeyChecking", "no");// making a connection with timeout.session.connect(30000);这样一个ssh的Session便建立好了,下面我们可以通过这个Session获取一些Channel,运行一些功能

2.exec channel 示例

Channel channel = session.openChannel("exec");
//command is your command to be exexuted
((ChannelExec) channel).setCommand(command);
BufferedReader fromServer = new java.io.BufferedReader(new InputStreamReader(
(channel.getInputStream())));
channel.connect();
StringBuffer sb = new StringBuffer();
Thread.sleep(1000);
while (fromServer.ready()) {String tt = fromServer.readLine();
sb.append(tt+'\n');
}
channel.disconnect();
System.out.println(sb.toString);

在ssh的channel中,我们的输入输出都是建立在Java I/O的流模型之上的,Channel向远程服务的输出为OutputStream,远程机器返回的内容是通过Channel的InputStream,所以我们可以以流的形式向Channel的OutputStream放要传给远程机器的命令,也可以从Channel的InputStream中读取内容.(这一点在shell类型的channel中尤为重要)

3.sftp channel的代码片段示例

ChannelSftp channel = (ChannelSftp)session.openChannel("sftp");
channel.connect(1000);
channel.get("远程文件", "本地目录");
channel.disconnect();

这样我们便实现了获取远程文件的功能,更多使用方法还请参阅官方jar包中的实例代码.

浅谈Jsch SSH2相关推荐

  1. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  2. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  3. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  4. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  5. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  6. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  7. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  8. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

  9. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...

最新文章

  1. 加快Tensorflow和Keras图像数据集的训练速度
  2. thinkphp5 图片压缩旋转_PPT图片超多,如何让排版更精致?
  3. Python学习,装饰器,元类
  4. linux libbz2.so.1,libbz2.so.1.0 = not found 试过了链接和设置环境变量
  5. iOS任何界面全屏炫酷倒计时,一句代码就够了
  6. 勤能补拙 VS 思考补拙
  7. 解决华为手机用rem单位,内容超出屏幕宽度问题
  8. 【省下5w】uniapp使用“天地图”地图API开发 - 免费地图组件
  9. 文件服务器和nas区别,nas和ftp服务器的区别
  10. C语言数字图像处理---2.3图像空域滤波
  11. 手机屏幕按键测试软件,涨见识了——手机居然能作为维修检测工具来用!
  12. 如何做一个优秀的团队成员
  13. malloc()动态分配内存
  14. 彻底明白php中cgi、fastcgi和php-cgi、php-fpm及php运行原理
  15. 组一个包括协调器路由器终端节点的zigbee网络,通过串口能获取它们的拓扑结构。
  16. 判断点是否在图形(矩形、椭圆、多边形)内的算法(一)
  17. 数字图像处理之位图在计算机中的存储结构
  18. 正睿OI DAY8 ks1
  19. vue导出excel功能实现
  20. 小二读西游-法术学习哪家强,三星洞,须菩提

热门文章

  1. 大学生申请软著的好处
  2. Illustrator “图像裁切”功能如何使用?
  3. 1.11 Illustrator视图的预览模式 [Illustrator CC教程]
  4. Git统计一段时间内代码的修改量
  5. 排他思想 -- 百度换肤效果案例 以及 点击某按钮只是该按钮变色
  6. Redis 集群搭建及集群管理工具
  7. Tensorflow物体检测(Object Detection)
  8. 机房空调系统集中控制节能降耗方案
  9. 突发!字节跳动AI Lab总监李磊离职!加盟美国高校,曾为百度少帅科学家,交大ACM班成员...
  10. android有道翻译代码,Android使用有道翻译API实如今线翻译功能(示例代码)