본문 바로가기
Java/알고리즘과 자료구조

com.jcraft.jsch

by Mecodata 2023. 12. 13.

정의

- Java에서 SSH(Secure Shell) 프로토콜을 사용하여 원격 시스템과 통신할 수 있게 해주는 라이브러리

 

클래스 종류

- com.jcraft.jsch.JSch = JSch 라이브러리의 핵심 클래스로, SSH 연결을 설정하고 SSH 세션을 얻기 위한 메서드를 제공

- com.jcraft.jsch.JSchException = JSch 라이브러리에서 발생할 수 있는 예외 

- com.jcraft.jsch.Session = SSH 연결 자체 (연결 후 실제로 데이터를 주고받는 작업은 Session 객체를 통해 이뤄짐)

Session 인스턴스는 JSch 객체를 통해 생성됨 

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

JSch jsch = new JSch();
Session session = jsch.getSession("접속아이디", "주소", 포트);
session.setPassword("비밀번호");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();

session.disconnect();

com.jcraft.jsch.ChannelShell = 원격 서버와의 상호 작용을 위한 셸 세션 제공 (셸 명령 실행 및 결과값 수령)

- com.jcraft.jsch.ChannelExec = 원격 서버에서 명령을 실행하기 위한 채널을 제공 (단일 명령)

ChannelExec 인스턴스는 Session 객체를 통해 생성됨

import com.jcraft.jsch.Session;
import com.jcraft.jsch.ChannelExec;

private Session session
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");

- com.jcraft.jsch.ChannelSftp = SSH File Transfer Protocol(SFTP)를 사용하여 원격 서버와 파일을 전송하고 관리하기 위한 채널을 제공 (파일 업/다운로드, 디렉터리 생성 등)

ChannelShell, ChannelExec, ChannelSftp가 있지만 ChannelExec로 나머지 두 클래스 커버 가능

 

SFTP(Secure File Transfer Protocol)

정의

- SSH를 기반으로 파일 전송을 안전하게 할 수 있도록 돕는 암호화된 프로토콜

 장점

- SSH 사용 → 데이터가 암호화되어 전송되어 보안 위협으로부터 안전

- SSH 키 또는 계정과 관련된 비밀번호를 사용하여 SFTP 서버에 인증 가능

- SSH의 포트 포워딩 기능을 사용하여 원격 서버에 안전하게 접근 가능

SSH 포트 포워딩(SSH Port Fowarding) = Proxy와 비슷하게 Client가 서버에 직접 접근하지 않고 중간에 SSH 터널을 거쳐서 서버로 접근하는 기능 

- SFTP는 데이터를 전송하기 전에 압축하고 전송 중에는 데이터의 무결성을 검사

com.jcraft.jsch.ChannelSftp

import java.io.FileInputStream;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

JSch jsch = new JSch();

// 세션 생성 및 연결
Session session = jsch.getSession(username, host, 22); // SSH는 기본적으로 22번 포트 사용
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();

// SFTP 채널 열기
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();

// 파일 업로드
channelSftp.cd(path);
FileInputStream fis = new FileInputStream(File);
channelSftp.put(fis, filename);

// 스트림, 채널, 세션 닫기
fis.close();
channelSftp.disconnect();
session.disconnect();

- put(FileInputStream, filename) = 해당 파일명으로 해당 FileInputStream으로 읽어온 데이터 저장

- get(filepath, FileOutputStream) = 지정한 경로에 있는 파일의 데이터를 읽어와 지정한 FileOutputStream에 작성(다운로드) 

- cd(path) = 지정한 경로로 이동

- mkdir(path) = 지정한 경로에 디렉터리 생성

- rm(path) = 지정한 경로에 있는 파일 삭제

- rename(oldpath, newpath) = 파일명 변경

- connect() = SFTP 연결

- disconnect() = SFTP 연결 종료 

'Java > 알고리즘과 자료구조' 카테고리의 다른 글

CopyOnWriteArrayList  (0) 2024.05.02
RestTemplate와 WebClient  (0) 2024.04.12
java.util.HashSet  (0) 2023.11.14
java.util.Stack  (0) 2023.06.21
java.lang.StringBuilder, StringBuffer  (0) 2023.05.16

댓글