JSch 库的使用

*******************************1.建立连接的步骤

1)、JSch jsch = new JSch(); // 创建JSch对象

2)、Session session = jsch.getSession(userName, ip, port); // 根据用户名,主机ip, 端口获取一个Session对象
3)、session.setPassword(password); // 设置密码

4)、 Properties config = new Properties();

config.put("StrictHostKeyChecking", "no"); //”如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。

session.setConfig(config); // 为Session对象设置properties

5)、session.setTimeout(6000); // 设置timeout时间
session.connect(); // 通过Session建立链接

6)、Channel channel = session.openChannel("sftp"); // 打开SFTP通道

7)、channel.connect(); // 建立SFTP通道的连接
sftp = (ChannelSftp) channel;

*******************************2.断开连接的步骤

1)、ChannelSftp 断开连接 sftp.disconnect()
2)、断开session连接 sftp.getSession().disconnection()

******************************* 3.上传文件到服务器函数

1)、 public void put(String src, String dst) 将本地文件名为src的文件上传到目标服务器,目标文件名为dst,若dst为目录,则目标文件名将与src文件名相同。 采用默认的传输模式:OVERWRITE
*************注意src为windows路径 格式为"D:\\iotest\\testSFTP.txt" **************
************* dst 为服务器路径 格式为"/home/test01/zz/testSFTP.txt"**************

三种模式的区别:
OVERWRITE 0
   完全覆盖模式,即如果目标文件已经存在,传输的文件将完全覆盖目标文件,产生新的文件。
   RESUME 1
   恢复模式,如果文件已经传输一部分,这时由于网络或其他任何原因导致文件传输中断,如果下一次传输相同的文件
   则会从上一次中断的地方续传。
  APPEND 2
   追加模式,如果目标文件已存在,传输的文件将在目标文件后追加。

2)、public void put(String src, String dst, int mode)
//mode 为传输模式(mode可选值为:ChannelSftp.OVERWRITE,ChannelSftp.RESUME,ChannelSftp.APPEND)

3)、public void put(String src, String dst, SftpProgressMonitor monitor)
//类似于方法一 只是SftpProgressMonitor接口的monitor对象来监控文件传输的进度。

4)、5)、6)public void put(InputStream src, String dst)
(5)(6)类似于(2)(3)

7)、public OutputStream put(String dst) 该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传 输到目标服务器,目标文件名为dst,dst不能为目录。 采用默认的传输模式:OVERWRITE

8)、9)类似 public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode)
只是参数是final

***********************************4.关于SftpProgressMonitor监控函数
接口的代码为:
public interface SftpProgressMonitor{
public static final int PUT=0;
public static final int GET=1;
void init(int op, String src, String dest, long max);
boolean count(long count);
void end();
}
我们需用自己去写实现 重写三个方法 init count end

init(): 当文件开始传输时,调用init方法。

count(): 当每次传输了一个数据块后,调用count方法,count方法的参数为这一次传输的数据块大小。

end(): 当传输结束时,调用end方法。

***********************************5.文件下载

1)、public void get(String src, String dst) 将目标服务器上文件名为src的文件下载到本地,本地文件名为dst。若dst为目录,则下载到本地的文件名将与src文件名相同

2)、public void get(String src, String dst, SftpProgressMonitor monitor)、将目标服务器上文件名为src的文件下载到本地,本地文件名为dst。若dst为目录,则下载到本地的文件名将与src文件名相同。

3)、public void get(String src, String dst,SftpProgressMonitor monitor, int mode)//同理

4)、public void get(String src, OutputStream dst)将目标服务器上文件名为src的文件下载到本地,下载的数据写入到输出流对象dst(如:文件输出流)。
5)6)同理 2)3)

7)、public InputStream get(String src) 该方法返回一个输入流,该输入流含有目标服务器上文件名为src的文件数据。可以从该输入流中读取数据,最终将数据传输到本地

8)、public InputStream get(String src, SftpProgressMonitor monitor)

9)、public InputStream get(String src, final SftpProgressMonitor monitor, finallong skip)

它所包含的监控器 progressMonitor 与上传的类似;

***********************************6.服务器的辅助方法

1)、rm(String path) 删除文件,path不能为目录,删除目录使用rmdi

2)、rmdir(String path) 删除目录,但是只能删除空目录

3)、rename(String oldpath, String newpath) 如果oldPath为目录,不要求目录必须为空
如果newpath为目录,则newpath必须不能存在,如果已经存在该目录,则会出现重名或者移动失败
1、重命名文件或者目录
2、移动文件或者目录
4)、ls(String path) 列出指定目录下的所有文件和子目录。该方法返回Vector对象,该列表具体存放的是LsEntry对象
5)、cd(String path) 进入指定的目录

时间: 2024-12-10 22:01:05

JSch 库的使用的相关文章

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

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=S

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.

JSch : channel never closed or EOF 通道未关闭

最近,我们的项目在开发远程节点管理的时候,使用了jsch库.在测试的时候发现有个节点在cmd执行完成之后,channel.isClosed()一直都是false,导致请求无法返回,但是其它有些节点就没有关系,直接执行都是正常的,返回码也是完全相同.经google,也没有找到相应解决方法比如https://github.com/lucastheisen/jsch-extension/issues/6,https://stackoverflow.com/questions/12138777/jsch

Android开发笔记(一百一十)使用http框架上传文件

HTTP上传 与文件下载相比,文件上传的场合不是很多,通常用于上传用户头像.朋友圈发布图片/视频动态等等,而且上传文件需要服务器配合,所以容易被app开发者忽略.就上传的形式来说,app一般采用http上传文件,很少用ftp上传文件. HttpURLConnection上传 很可惜Android没有提供专门的文件上传工具类,所以我们要自己写代码实现上传功能了.其实也不难,一样是按照普通网络访问的POST流程,只是要采用"multipart/form-data"方式来分段传输.另外文件上

JGit与远程仓库链接使用的两种验证方式(ssh和https)

JGit是使用JAVA的API来操控Git仓库的库,由Eclipse公司维护.他提供的API分成两个层次,底层命令和高层命令.底层API是直接作用于低级的仓库对象,高层的API是一个面向普通用户级别功能友好的前端. JGit主要通过SSH和HTTP(S)的方式与远程仓库进行交互,此外也可以用Git协议(只读).通过这两种方式,必然是需要添加验证信息的.介绍如下: (1)HTTPS - https://example.com/repo.git CloneCommand cloneCommand =

67个拯救web开发者的工具、库和资源!

划重点 在本文中,我不会去谈 React.Angular.Vue 等等这些大的前端框架,也不会谈 Atom.VS code.Sublime 等等这些已经很出名的代码编辑器,我只是想简单的分享一套我认为有助于提升开发者工作流的工具集. 这套工具集中的大部分你可能见过,也可能没见过,如果有哪个让你眼前一亮,那么我的分享就很值了. 这个列表包含许多种类的资源,所以这里我将它们分组整理. Javascript 库 Particles.js-一个用来在 web 中创建炫酷的浮动粒子的库 Three.js-

sqlserver 全库查询 带架构

网上现有的全库查询,无法识别自定义架构的数据库结构: declare @str nvarchar(10) declare @tablename varchar(50) declare @colname varchar(50) declare @counts int declare @sql nvarchar(2000)--以上定义变量 declare cur1 cursor for select a.name tablename,B.name colname from sys.objects a

iOS库--.a与.framework

一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存. 三.iOS里静态库形式? .a和.framework 四.iOS里动态库形式? .dylib和.framework 五.framework为什么既是静态库又是动态库? 系统的.framework是动态库,我们自己建立的.fram