基于maven构建工程,pom.xml加入依赖。
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.53</version> </dependency>
第二步 工具类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
|
package com.guohuai.util;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import java.util.Vector;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
import com.jcraft.jsch.SftpException;
/** *
* @ClassName: SFTPUtil
* @Description: sftp连接工具类
* @date 2017年5月22日 下午11:17:21
* @version 1.0.0
*/ public class SFTPUtil {
private transient Logger log = LoggerFactory.getLogger( this .getClass());
private ChannelSftp sftp;
private Session session;
/** FTP 登录用户名*/ private String username;
/** FTP 登录密码*/ private String password;
/** 私钥 */ private String privateKey;
/** FTP 服务器地址IP地址*/ private String host;
/** FTP 端口*/ private int port;
/**
* 构造基于密码认证的sftp对象
* @param userName
* @param password
* @param host
* @param port
*/ public SFTPUtil(String username, String password, String host, int port) {
this .username = username;
this .password = password;
this .host = host;
this .port = port;
}
/**
* 构造基于秘钥认证的sftp对象
* @param userName
* @param host
* @param port
* @param privateKey
*/ public SFTPUtil(String username, String host, int port, String privateKey) {
this .username = username;
this .host = host;
this .port = port;
this .privateKey = privateKey;
}
public SFTPUtil(){}
/**
* 连接sftp服务器
* @throws Exception
*/ public void login(){
try {
JSch jsch = new JSch();
if (privateKey != null ) {
jsch.addIdentity(privateKey); // 设置私钥
log.info( "sftp connect,path of private key file:{}" , privateKey);
}
log.info( "sftp connect by host:{} username:{}" ,host,username);
session = jsch.getSession(username, host, port);
log.info( "Session is build" );
if (password != null ) {
session.setPassword(password);
}
Properties config = new Properties();
config.put( "StrictHostKeyChecking" , "no" );
config.put("kex", "diffie-hellman-group1-sha1");// 同时需要修改openSSH配置文件 session.setConfig(config);
session.connect();
log.info( "Session is connected" );
Channel channel = session.openChannel( "sftp" );
channel.connect();
log.info( "channel is connected" );
sftp = (ChannelSftp) channel;
log.info(String.format( "sftp server host:[%s] port:[%s] is connect successfull" , host, port));
} catch (JSchException e) {
log.error( "Cannot connect to specified sftp server : {}:{} \n Exception message is: {}" , new Object[]{host, port, e.getMessage()});
}
}
/**
* 关闭连接 server
*/ public void logout(){
if (sftp != null ) {
if (sftp.isConnected()) {
sftp.disconnect();
log.info( "sftp is closed already" );
}
}
if (session != null ) {
if (session.isConnected()) {
session.disconnect();
log.info( "sshSession is closed already" );
}
}
}
/**
* 将输入流的数据上传到sftp作为文件
* @param directory 上传到该目录
* @param sftpFileName sftp端文件名
* @param in 输入流
* @throws SftpException
* @throws Exception
*/ public void upload(String directory, String sftpFileName, InputStream input) throws SftpException{
try {
sftp.cd(directory);
} catch (SftpException e) {
log.warn( "directory is not exist" );
sftp.mkdir(directory);
sftp.cd(directory);
}
sftp.put(input, sftpFileName);
log.info( "file:{} is upload successful" , sftpFileName);
}
/**
* 上传单个文件
* @param directory 上传到sftp目录
* @param uploadFile 要上传的文件,包括路径
* @throws FileNotFoundException
* @throws SftpException
* @throws Exception
*/ public void upload(String directory, String uploadFile) throws FileNotFoundException, SftpException{
File file = new File(uploadFile);
upload(directory, file.getName(), new FileInputStream(file));
}
/**
* 将byte[]上传到sftp,作为文件。注意:从String生成byte[]是,要指定字符集。
* @param directory 上传到sftp目录
* @param sftpFileName 文件在sftp端的命名
* @param byteArr 要上传的字节数组
* @throws SftpException
* @throws Exception
*/ public void upload(String directory, String sftpFileName, byte [] byteArr) throws SftpException{
upload(directory, sftpFileName, new ByteArrayInputStream(byteArr));
}
/**
* 将字符串按照指定的字符编码上传到sftp
* @param directory 上传到sftp目录
* @param sftpFileName 文件在sftp端的命名
* @param dataStr 待上传的数据
* @param charsetName sftp上的文件,按该字符编码保存
* @throws UnsupportedEncodingException
* @throws SftpException
* @throws Exception
*/ public void upload(String directory, String sftpFileName, String dataStr, String charsetName) throws UnsupportedEncodingException, SftpException{
upload(directory, sftpFileName, new ByteArrayInputStream(dataStr.getBytes(charsetName)));
}
/**
* 下载文件
* @param directory 下载目录
* @param downloadFile 下载的文件
* @param saveFile 存在本地的路径
* @throws SftpException
* @throws FileNotFoundException
* @throws Exception
*/ public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException{
if (directory != null && ! "" .equals(directory)) {
sftp.cd(directory);
}
File file = new File(saveFile);
sftp.get(downloadFile, new FileOutputStream(file));
log.info( "file:{} is download successful" , downloadFile);
}
/**
* 下载文件
* @param directory 下载目录
* @param downloadFile 下载的文件名
* @return 字节数组
* @throws SftpException
* @throws IOException
* @throws Exception
*/ public byte [] download(String directory, String downloadFile) throws SftpException, IOException{
if (directory != null && ! "" .equals(directory)) {
sftp.cd(directory);
}
InputStream is = sftp.get(downloadFile);
byte [] fileData = IOUtils.toByteArray(is);
log.info( "file:{} is download successful" , downloadFile);
return fileData;
}
/**
* 删除文件
* @param directory 要删除文件所在目录
* @param deleteFile 要删除的文件
* @throws SftpException
* @throws Exception
*/ public void delete(String directory, String deleteFile) throws SftpException{
sftp.cd(directory);
sftp.rm(deleteFile);
}
/**
* 列出目录下的文件
* @param directory 要列出的目录
* @param sftp
* @return
* @throws SftpException
*/ public Vector<?> listFiles(String directory) throws SftpException {
return sftp.ls(directory);
}
public static void main(String[] args) throws SftpException, IOException {
SFTPUtil sftp = new SFTPUtil( "lanhuigu" , "123456" , "192.168.200.12" , 22 );
sftp.login();
//byte[] buff = sftp.download("/opt", "start.sh");
//System.out.println(Arrays.toString(buff));
File file = new File( "D:\\upload\\index.html" );
InputStream is = new FileInputStream(file);
sftp.upload( "/data/work" , "test_sftp_upload.csv" , is);
sftp.logout();
}
} |
相关推荐
本篇文章将深入探讨如何使用univocity-parsers库来创建CSV文件,以及如何利用JSCH库将生成的CSV文件上传到SFTP(Secure File Transfer Protocol)服务器。 首先,让我们了解univocity-parsers库。这是一个强大的...
JSch库允许Java应用程序创建SFTP会话,进行上传、下载、列出目录、重命名和删除文件等操作,这些都是在安全的SSH连接下完成的。 **在Linux系统上的应用** 在Linux环境中,JSch库特别有用,因为Linux系统广泛使用...
这个工具主要用于在本地系统和远程服务器之间自动化上传和下载文件,同时还具备了速度控制、完整性验证以及在连接失败后的自动重连功能。 描述中的关键点包括: 1. **自动化文件传输**:此工具能够自动地将本地...
sftp上传和下载工具类, jsch-0.1.51.jar非常方便,亲测可用!
标题中的“ssh可用框架下载”指的是在信息技术领域中,与Secure Shell(SSH)相关的软件框架。SSH是一种网络协议,用于安全地远程登录到服务器、执行命令以及传输数据。在这个场景中,"可用框架"可能是指支持SSH功能...
5. **操作远程资源**:在打开的通道上执行相应操作,如发送命令、上传/下载文件。 6. **关闭资源**:完成操作后,记得关闭通道和会话,以释放系统资源。 SSH2整合JAR的使用对于Java开发者来说非常有用,它简化了与...
这个“ssh2完整整合jar包”显然包含了实现SSH2协议所需的所有Java库,使得开发者能够在Java应用程序中集成SSH2功能,如远程命令执行、文件传输、端口转发等。 SSH2协议的主要优点包括数据加密、服务器认证和防止...
- **文件传输**:通过SFTP(SSH File Transfer Protocol)安全地上传和下载文件。 - **端口转发**:通过SSH隧道将本地端口上的流量转发到远程服务器,增强网络访问的安全性。 - **命令执行**:在远程主机上执行命令...
SSH2 登录后,可以使用 SFTP (Secure File Transfer Protocol) 来进行文件操作,或者通过 SSH2 的 Channel 执行命令或脚本,例如运行 SQL 查询。 ```java @Configuration public class SSHConfig { @Value("${ssh...
这个例子很可能是使用JSch库,因为它是Java中常用的SSH库,可以方便地进行SSH连接、文件传输和远程执行命令。 下面是一些关于SSH框架登录的关键知识点: 1. **公钥认证**:SSH允许使用公钥/私钥对进行身份验证。...
JSch是一个纯Java实现的SSH2库,能够支持SFTP、SCP和SSH连接。在Jenkins中,这个插件使得开发者能够安全地通过SSH协议与远程服务器进行通信,例如执行命令、传输文件等。然而,如果该插件存在漏洞,可能会导致安全...
5. **文件传输**:SSH2框架内嵌SFTP(Secure File Transfer Protocol),这是一种基于SSH2的安全文件传输协议,可以安全地进行文件的上传、下载和管理。 6. **会话记录**:SSH2框架支持会话记录,有助于调试和审计...
4. **SFTP (Secure File Transfer Protocol)**: SSH2支持SFTP,一种安全的文件传输协议,用于在客户端和服务器之间安全地移动文件。 5. **代理转发**: SSH2支持端口转发,可以将本地网络服务的请求通过SSH隧道转发...