정의
- 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 |
댓글