Jsch初步

[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试验

Java代码  

  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则为空。

时间: 2024-10-26 09:05:18

Jsch初步的相关文章

初步了解CPU

了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. 一.总述 先从计算机的结构说起,在现代计算机中,CPU是核心,常常被比喻为人的大脑.现在的计算机都为“冯·诺依曼机”,“冯诺依曼机”的一个显著的特点就是由运算器.存储器.控制器.输入设备和输出设备组成.CPU是运算器和控制器合起来的统称,因为运算器和控制器在逻辑关系和电路结构上联系十分紧密,尤其在大

zerglurker的C语言教程004——指针初步讲解

在上次的教程里面,我提到了指针. 针对指针,这次我将简单的讲讲,后面我还会讲到--那个时候你应该有了相当的基础. 首先,先讲讲指针类型. 任何类型关键字后面加一个*符号,就会变成指针类型. 比如: char → char* 字符指针 int → int* 整数指针 double→double* 双精度指针 甚至还可以这样: char*→char** 字符指针的指针类型 →char*** 字符指针的指针的指针类型- 指针本质上是一个内存地址值,该内存地址上存放的是相关类型的数值.但是void*指针

nodejs,webpack安装以及初步运用

nodejs安装: 1.下载:https://nodejs.org/en/download/ 2.安装node-v6.11.3-x64.msi文件,直接默认安装(next--): 3.验证是否完成安装:cmd 进入后输入命令 node -v  回车能得到nodejs版本号: 输入node 回车再输入console.log('aaaaa') 回车能正常显示输出. 这表示nodejs安装成功. webpack安装: 1.npm安装:在f盘新建文件夹webpack,在webpack文件夹建文件夹dem

Github 的注册教程和初步使用体验

我叫许晴,是网工143的学生,学号是1413042064,兴趣包括手绘,看书和手游.学习过c++和汇编语言课程,但在编程方面没什么独立实践经验. 我的Githup用户名是 XQ123 .下面是我在github的注册流程及初步使用体验. 我先搜索github,试了好几次才进去官网,但是在手机客户端注册的话比较好进.这是网页注册的界面.使用名不能设成中文,只能使用数字.字母和特殊符号,不能以短横线开头.如果设置的用户名有重复的话也不能设置 如果设置的用户名已经有人使用的话,也是不能设置的. 然后就是

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

使用jsch连接数据库

通过java的jsch连接远程数据库 有时候我们本地代码可能无法连接数据库,因为数据库增加了白名单,指定ip的服务器才可以连接到数据库,不过我们可以通过连接该指定ip的服务器,然后通过该服务器连接数据库,就像很多数据库可视化软件一样.通过使用jsch,我们也可以在代码层面实现这个功能.话不多说,直接开码:         JSch jsch = new JSch();         Session sess;         //这里xxx.xxx.xxx.xxx为已加白名单的远程服务器   

Remote SSH: Using JSCH with Expect4j

Now-a-days, we can see that whole world is moving around Clouds and virtualization. More and more applications are building for managing datacentre servers and other stuff. I have been part of one of such a module. I developed one module for monitori

虚拟桌面技术的初步探讨

[文章标题]: 虚拟桌面技术的初步探讨  [文章作者]:  newjueqi  [作者邮箱]: [email protected][作者QQ号]: 190678908[编写语言]:VC++6.0[操作平台]: XP-SP2[作者声明]:感觉到这是一种非常有意思的技术,这篇就当成是学习笔记吧!本人只是感兴趣,没有其它目的,失误之处敬请给位大侠原谅! 本文曾发表于看学论坛http://bbs.pediy.com/showthread.PHP?t=82537                      

【Qt学习笔记】1.初步接触

一.前言 Qt是一个跨平台的C++图形面向对象的框架,今天开始学习并记录学习过程,希望通过这段时间的努力学会Qt的使用. 同时我也希望在学习的过程中对C++的各种特性有能深刻的认识. 此外,我在Qt初步的学习过程中,所用的环境应该是 VS2015 IDE 二.安装 官网下载Qt安装包和 Qt for VS addin,分别安装,并配置. 三.Hello World 接下来用Qt框架来完成第一个程序 首先打开VS,创建一个Qt工程 熟悉的C++界面,但Qt是有可视化界面的,点击解决方案管理器中的.