[From] http://xpenxpen.iteye.com/blog/2061869

上一篇文章我们成功搭建了sshd服务器,并通过3种方式登陆上了ssh。这一篇我们将用开源jar包jsch来登陆ssh服务器。

1.去官网下载最新的jar包 
jsch-0.1.51.jar

2.运行官方例子 
Shell.java 
演示了如何连接到sshd服务器 
Exec.java 
演示了登陆上去并执行一条命令

注意以上2个例子让你输入密码同样也是输入cyg_server用户的密码 
运行成功后可以看下它的代码。

3.再做一个SFTP试验

  1. import java.io.*;
  2. import java.util.*;
  3. import com.jcraft.jsch.*;
  4. public class Test1 {
  5. public static void main(String[] args) throws Exception {
  6. Test1.sshSftp("127.0.0.1", "Administrator", "cyg_server", 22);
  7. Test1.sshSftp2("127.0.0.1", "Administrator", 22, "C:/Users/Administrator/rsa_my", "");
  8. }
  9. /**
  10. * 利用JSch包实现SFTP下载、上传文件(用户名密码方式登陆)
  11. * @param ip 主机IP
  12. * @param user 主机登陆用户名
  13. * @param psw  主机登陆密码
  14. * @param port 主机ssh2登陆端口,如果取默认值(默认值22),传-1
  15. *
  16. */
  17. public static void sshSftp(String ip, String user, String psw
  18. ,int port) throws Exception{
  19. System.out.println("开始用户名密码方式登陆");
  20. Session session = null;
  21. JSch jsch = new JSch();
  22. if(port <=0){
  23. //连接服务器,采用默认端口
  24. session = jsch.getSession(user, ip);
  25. }else{
  26. //采用指定的端口连接服务器
  27. session = jsch.getSession(user, ip ,port);
  28. }
  29. //如果服务器连接不上,则抛出异常
  30. if (session == null) {
  31. throw new Exception("session is null");
  32. }
  33. //设置登陆主机的密码
  34. session.setPassword(psw);//设置密码
  35. //设置第一次登陆的时候提示,可选值:(ask | yes | no)
  36. session.setConfig("StrictHostKeyChecking", "no");
  37. //设置登陆超时时间
  38. session.connect(30000);
  39. sftp(session, "aa.log");
  40. System.out.println("sftp成功");
  41. }
  42. /**
  43. * 利用JSch包实现SFTP下载、上传文件(秘钥方式登陆)
  44. * @param ip 主机IP
  45. * @param user 主机登陆用户名
  46. * @param port 主机ssh2登陆端口,如果取默认值(默认值22),传-1
  47. * @param privateKey 密钥文件路径
  48. * @param passphrase 密钥的密码
  49. *
  50. */
  51. public static void sshSftp2(String ip, String user
  52. ,int port ,String privateKey ,String passphrase) throws Exception{
  53. System.out.println("开始秘钥方式登陆");
  54. Session session = null;
  55. JSch jsch = new JSch();
  56. //设置密钥和密码
  57. //支持密钥的方式登陆,只需在jsch.getSession之前设置一下密钥的相关信息就可以了
  58. if (privateKey != null && !"".equals(privateKey)) {
  59. if (passphrase != null && "".equals(passphrase)) {
  60. //设置带口令的密钥
  61. jsch.addIdentity(privateKey, passphrase);
  62. } else {
  63. //设置不带口令的密钥
  64. jsch.addIdentity(privateKey);
  65. }
  66. }
  67. if(port <=0){
  68. //连接服务器,采用默认端口
  69. session = jsch.getSession(user, ip);
  70. }else{
  71. //采用指定的端口连接服务器
  72. session = jsch.getSession(user, ip ,port);
  73. }
  74. //如果服务器连接不上,则抛出异常
  75. if (session == null) {
  76. throw new Exception("session is null");
  77. }
  78. //设置第一次登陆的时候提示,可选值:(ask | yes | no)
  79. session.setConfig("StrictHostKeyChecking", "no");
  80. //设置登陆超时时间
  81. session.connect(30000);
  82. sftp(session, "bb.log");
  83. System.out.println("sftp成功");
  84. }
  85. private static void sftp(Session session, String uploadFileName) throws Exception {
  86. Channel channel = null;
  87. try {
  88. //创建sftp通信通道
  89. channel = (Channel) session.openChannel("sftp");
  90. channel.connect(1000);
  91. ChannelSftp sftp = (ChannelSftp) channel;
  92. //进入服务器指定的文件夹
  93. sftp.cd("testsftp");
  94. //列出服务器指定的文件列表
  95. Vector v = sftp.ls("*.txt");
  96. for(int i=0;i<v.size();i++){
  97. System.out.println(v.get(i));
  98. }
  99. //以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
  100. OutputStream outstream = sftp.put(uploadFileName);
  101. InputStream instream = new FileInputStream(new File("C:/ftptest/aa.txt"));
  102. byte b[] = new byte[1024];
  103. int n;
  104. while ((n = instream.read(b)) != -1) {
  105. outstream.write(b, 0, n);
  106. }
  107. outstream.flush();
  108. outstream.close();
  109. instream.close();
  110. } catch (Exception e) {
  111. e.printStackTrace();
  112. } finally {
  113. session.disconnect();
  114. channel.disconnect();
  115. }
  116. }
  117. }

代码是引用了http://my.oschina.net/hetiangui/blog/137357 
首先这句sftp.ls("*.txt")是列出指定文件夹下所有txt文件, 
然后sftp.put("3.txt")是上传一个文件到SFTP服务器上。

注意main函数里有2种登陆方式, 
第一种是通过用户名Administrator,密码cyg_server的方式登陆。 
第二种是通过秘钥方式登陆,我们的私钥目录是"C:/Users/Administrator/rsa_my",而passphrase则为空。

Jsch初步的更多相关文章

  1. 用jsch.jar实现SFTP上传下载删除

    java类: 需要引用的jar: jsch-0.1.53.jar 关于jsch有篇文章关于目录的问题写得非常好:http://www.zzzyk.com/show/9f02969327434a6c.h ...

  2. 用jsch.jar实现SFTP上传下载删除【转】【补】

    java类: 需要引用的jar: jsch-0.1.53.jar 关于jsch有篇文章关于目录的问题写得非常好:http://www.zzzyk.com/show/9f02969327434a6c.h ...

  3. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  4. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  5. Android自定义View初步

    经过上一篇的介绍,大家对于自定义View一定有了一定的认识,接下来我们就以实现一个图片下显示文字的自定义View来练习一下.废话不多说,下面进入我们的正题,首先看一下我们的思路,1.我们需要通过在va ...

  6. 初步认识Node 之Node为何物

    很多人即便是在使用了Node之后也不知道它到底是什么,阅读完本文你应该会有一个初步的.具体的概念了.    Node的目标 提供一种简单的构建可伸缩网络程序的方法.那么,什么是可伸缩网络程序呢?可伸缩 ...

  7. [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)

    [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date  周六 10 一月 2015 By 钟谢伟 Category website develop ...

  8. 基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  9. Azure底层架构的初步分析

    之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...

随机推荐

  1. poj1722 SUBTRACT

    应该是基础的dp练手题 线性dp最主要的就是关于阶段的划分,这个题中我没想到的一点就是开状态的时候使用了前i个数能合成的数来记录 我自己的想法就是类似于区间dp这样的记录方法,这种方法确实开了很多冗余 ...

  2. ESP8266文档阅读ESP8266 SDK 入门指南

    ESP8266 SDK  入门指南 1.概述 1.2.ESP8266 HDK 1.3.ESP8266 SDK 1.4.ESP8266 FW 1.5.ESP8266 工具集 2.1.开发板方案 3.软件 ...

  3. hdu 4278 Faulty Odometer(进制转换)

    十进制转八进制的变形: #include<stdio.h> int main() { int n; while(scanf("%d",&n)!=EOF& ...

  4. hdu 4741 Save Labman No.004 (异面直线的距离)

    转载学习: #include <cstdio> #include <cstdlib> #include <cstring> #include <algorit ...

  5. ubuntu 14.04编译安装xen4.4总结

    1. 安装环境 操作系统:ubuntu14.04 xen版本:xen4.4 2. 依赖包的安装 在安装xen之前先进行依赖包的安装,在不停得尝试之后,总结出以下需要安装的依赖包. sudo apt-g ...

  6. css总结5:px、em、rem区别介绍

    1 PX px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的. PX特点 1. 浏览器无法调整px单位的字体,以em或rem为字体单位可调整字体. 2 EM em是相对长度单 ...

  7. 编写高质量代码改善C#程序的157个建议——建议21:选择正确的集合

    建议21:选择正确的集合 要选择正确的集合,首先要了解一些数据结构的知识.所谓数据结构,就是相互之间存在一种或多种特定关系的数据元素的集合. 集合的分类参考下图: 由于非泛型集合存在效率低及非类型安全 ...

  8. URLRewrite 实现方法详解

    所谓的伪静态页面,就是指的URL重写,在ASP.NET中实现非常简单首先你要在你的项目里引用两个DLL:ActionlessForm.dll.URLRewriter.dll,真正实现重写的是 URLR ...

  9. [.net 多线程]SpinWait

    <CLR via C#>读书笔记-线程同步(四) 混合线程同步构造简介 之前有用户模式构造和内核模式构造,前者快速,但耗费CPU:后者可以阻塞线程,但耗时.耗资源.因此.NET会有一些混合 ...

  10. Mysql避免重复插入记录方法

    一.mysql replace用法 1.replace into  replace into table (id,name) values('1','aa'),('2','bb')  此语句的作用是向 ...