요르딩딩

[Spring 분석] SFTP 파일 업로드 ( jsch 라이브러리) 본문

[Web]/[Spring]

[Spring 분석] SFTP 파일 업로드 ( jsch 라이브러리)

요르딩딩 2021. 5. 31. 13:55
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/

 

Java에서 원격 서버에 명령 실행하기

Java 에서 원격 서버 명령어를 실행하는 데에는 apache-commons 에 있는 라이브러리를 사용하면 편리합니다. maven / gradle 환경에서 apache-commons 을 빈번하게 사용하기 때문에 그대로 사용하면 됩니다.

linkeverything.github.io

https://lts0606.tistory.com/6

 

jsch 사용법(ssh 연결)

자바에서 ssh를 활용해서 다른 서버로 접속하여 명령어를 실행해야 되는 경우가 있었다. 이럴때는 jsch를 활용하면 쉽게 사용이 가능하다. Jsch를 활용한 개념은 3단계로 이루어 진다. 1. Jsch 클래스

lts0606.tistory.com

 

728x90
반응형
Comments