本文目录一览:
- 1、Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载
- 2、如何升级jsch-0.1.53.jar
- 3、用java实现sftp下载,报2: No such file
- 4、如何实现jsch logger打印
Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载
package jsch;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
public class Test {
protected String host;//sftp服务器ip
protected String username;//用户名
protected String password;//密码
protected String privateKey;//密钥文件路径
protected String passphrase;//密钥口令
protected int port = 22;//默认的sftp端口号是22
/**
* 获取连接
* @return channel
*/
public ChannelSftp connectSFTP() {
JSch jsch = new JSch();
Channel channel = null;
try {
if (privateKey != null !"".equals(privateKey)) {
//使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥
if (passphrase != null "".equals(passphrase)) {
jsch.addIdentity(privateKey, passphrase);
} else {
jsch.addIdentity(privateKey);
}
}
Session session = jsch.getSession(username, host, port);
if (password != null !"".equals(password)) {
session.setPassword(password);
}
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");// do not verify host key
session.setConfig(sshConfig);
// session.setTimeout(timeout);
session.setServerAliveInterval(92000);
session.connect();
//参数sftp指明要打开的连接是sftp连接
channel = session.openChannel("sftp");
channel.connect();
} catch (JSchException e) {
e.printStackTrace();
}
return (ChannelSftp) channel;
}
/**
* 上传文件
*
* @param directory
* 上传的目录
* @param uploadFile
* 要上传的文件
* @param sftp
*/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
s;
File file = new File(uploadFile);
s(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载文件
*
* @param directory
* 下载目录
* @param downloadFile
* 下载的文件
* @param saveFile
* 存在本地的路径
* @param sftp
*/
public void download(String directory, String downloadFile,
String saveFile, ChannelSftp sftp) {
try {
s;
s;
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除文件
*
* @param directory
* 要删除文件所在目录
* @param deleteFile
* 要删除的文件
* @param sftp
*/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
s;
s;
} catch (Exception e) {
e.printStackTrace();
}
}
public void disconnected(ChannelSftp sftp){
if (sftp != null) {
try {
s;
} catch (JSchException e) {
e.printStackTrace();
}
s;
}
}
}
如何升级jsch-0.1.53.jar
首先这里需要介绍一个新朋友给大家,就是他JSch。
这里简单介绍一下JSch,他是是SSH2的一个纯Java实现。Java中可以通过使用JSch来连接到sshd 服务器上,并进行文件的下载删除上传等操作。
2
JSch下载地址为可以直接百度一下。
找到Download,如图所示:
这里我们看到有两个可以下载的,一个是.zip,一个是.jar。
jsch-0.1.53.zip:为JSch的源码压缩包,有兴趣的码友可以下载下来研究一下。
jsch-0.1.53.jar:为JSch的编译好的jar包,开发时放到工程中即可。
这里我们就直接下载jsch-0.1.53.jar了。
END
JSch使用
我们将下载好的jsch-0.1.53.jar包放在我们的工程下方,并将jar包引入到工程中。
在工程中定义一个连接SFTP的类,这里我们定义为SFTPUtil.java。
大家可以根据自己需要进行定义。
首先我们需要在类中定义几个静态变量。
主机地址、端口号、用户名、密码
接下来我们定义链接到该服务器的方法名,这里命名该方法名为connect。
创建服务器连接的过程大致为一下几点:
1、创建session,将服务器地址信息放入session;
2、建立连接;
3、打开channel;
4、链接成功;
用java实现sftp下载,报2: No such file
String directory = ".";
目测 /home/httpd/test/ 是*nix的路径,而你用的是Windows,一来,没有这个目录,二来SFTP服务器分配的目录应该也不是这个,所以改".",即当前目录试试,如果不行就留空,或者改"/"
如何实现jsch logger打印
ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如:
put(): 文件上传
get(): 文件下载
cd(): 进入指定目录
ls(): 得到指定目录下的文件列表
rename(): 重命名指定文件或目录
rm(): 删除指定文件
mkdir(): 创建目录
rmdir(): 删除目录
等等(这里省略了方法的参数,put和get都有多个重载方法,具体请看源代码,这里不一一列出。)