本文作为java学习过程中的积累,同时也跟刚入门java童鞋分享下。
sftp 主要用于安全的进行文件的传输,即如果实际项目开发过程中,如需进行文件的传输,就可以拿这个demo进行参考。
本demo 主要包含文件的上次和下载(含断点续传的方法)
源码:https://github.com/wyfx09/wo_sftp.git
1.1. Maven引用
com.jcraft
jsch
0.1.54
1.2. 建立连接
JSchjsch = newJSch();
Session session = jsch.getSession(username, host, port);
session.setConfig(getSshConfig());
session.setPassword(password);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftpchannelSftp = (ChannelSftp) channel;
1.3. Logger
Jsch提供com.jcraft.jsch.Logger基类,用于输出Jsch的日志。
1.4. Sftp操作
put(): 文件上传
get(): 文件下载
cd(): 进入指定远程目录
lcd(): 进入指定本地目录
ls(): 得到指定目录下的文件列表
rename(): 重命名指定文件或目录
rm(): 删除指定文件
mkdir(): 创建目录
rmdir(): 删除目录
1.5. 传输进度
继承com.jcraft.jsch.SftpProgressMonitor,并实现其中的方法:
voidinit(intop, String src, String dest, longmax)
初始化方法,开始传输之前调用
op: 0-上传,1-下载
max: 文件大小
booleancount(longcount)
开始传输前调用一次:
count:已传输长度
每传一个数据块调用一次:
count: 每次传输的长度
voidend()
传输结束时调用
1.6. 断点续传
1.7. 签名登录
JSchjsch = newJSch();
jsch.addIdentity(identity, passphrase);
Session session = jsch.getSession(username, host, port);
session.setConfig(getSshConfig());
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftpchannelSftp = (ChannelSftp) channel;
2. 生成RSA
2.1. Linux环境下,执行以下命令生成
ssh-keygen -t rsa
2.2. 通过代码使用Jsch生成
KeyPairkpair = KeyPair.genKeyPair(jsch, keytype, keysize);
kpair.writePrivateKey(filename, passphrase.getBytes("UTF-8"));
kpair.writePublicKey(filename + ".pub", comment);
kpair.dispose();