요르딩딩
[Spring 분석] SFTP 파일 업로드 ( jsch 라이브러리) 본문
728x90
반응형
자바에서 ssh를 활용해서 다른 서버로 접속하여 명령어를 실행해야 되는 경우가 있었다.
이럴때는 jsch를 활용하면 쉽게 사용이 가능하다.
Jsch를 활용한 개념은 3단계로 이루어 진다.
1. Jsch 클래스를 생성한다.
2. ssh를 통해서 연결한다.
3. 원하는 행위를 연결한 서버로 전송한다.
우선 SFTP란 무엇인가??
FTP의 형태를 가지고 있지만 그 안에서는 SSH를 이용해 연결하는게 SFTP이다!
간단하게 FTP보다 보안이 강화된 전송 방식이다.
포트는 22( FTP의 경우 21)를 사용한다.
SFTP를 사용하기 위해 JSch라는 라이브러리를 다운 받았고 아래 링크에서 다운받으면 된다.
[pom.xml]
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
다음은 원격 서버에 파일을 올리는 코드입니다.
public void sendFile(HashMap<String, Object> param) throws Exception {
//String username, String password, String host, int port, String path, byte[] data, String filename
String username = StringUtil.fixNull(param.get("username"));
String password = StringUtil.fixNull(param.get("password"));
String host = StringUtil.fixNull(param.get("host"));
int port = Integer.parseInt(StringUtil.fixNull(param.get("port"), "-1"));
String path = StringUtil.fixNull(param.get("path"));
byte[] data = (byte[]) param.get("data");
String filename = StringUtil.fixNull(param.get("filename"));
if ( username.length() <= 0 || password.length() <= 0 || host.length() <= 0
|| port < 0 || path.length() <= 0 || data.length <= 0 || filename.length() <= 0 ) {
return;
}
//JSch 객체 생성
JSch jsch = new JSch();
//Session 생성, 원격서버에 대한 접속정보
Session session = jsch.getSession(username, host, port);
session.setPassword(password);
// properties 객체생성, StrictHostKeyChecking 이라는 설정값을 no 로 설정
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
//서버에 접속
session.connect(3000);
//sftp 채널열기
Channel channel = session.openChannel("sftp");
//원격지에 명령어 호출, 채널을 ssh용 채널 객체로 캐스팅한다.
channel.connect();
ChannelSftp channelSftp = (ChannelSftp) channel;
ByteArrayInputStream in = new ByteArrayInputStream(data);
//파일업로드
channelSftp.cd(path);
channelSftp.put(in, filename);
//채널, 세션 연결해제
channel.disconnect();
session.disconnect();
}
파일다운로드 개념은 아래와 같다.
cd라는 메소드를 통해서 파을을 받을 곳으로 이동한 뒤에 get메소드를 호출해서 쉽게 가능 하다.
파일을 전송하는 개념은 아래와 같아.
put이라는 메소드를 통해서 쉽게 가능하다.
참고: https://linkeverything.github.io/java/backend-shell-command/
728x90
반응형
'[Web] > [Spring]' 카테고리의 다른 글
[Spring 분석] Spring 와 Spring Boot 차이 (0) | 2021.06.29 |
---|---|
[Spring 분석] URI(URN, URL)란 (0) | 2021.06.28 |
[Spring 분석] 세션과 토큰(Session, Token) (0) | 2021.04.21 |
[Spring 분석] Transaction이란 (0) | 2021.04.21 |
[Spring 분석] DB연동 구조(그림) (0) | 2021.04.12 |
Comments