[ JSch ]
SSH 연결을 위한 세션을 생성하고 관리하는 기본 클래스. (팩토리 역할)
import com.jcraft.jsch.JSch;
JSch jsch = new JSch(); // JSch 객체 생성
[ Session ]
실제로 SSH 서버와 연결을 수립하고 통신을 담당하는 객체.
Session session = jsch.getSession("username", "hostname", 22); // JSch 객체를 통해 Session 생성
session.setPassword("password"); // 비밀번호 설정
session.setConfig("StrictHostKeyChecking", "no"); // 추가 설정
session.connect(); // SSH 연결 수립
=> JSch 객체의 .getSession() 메소드를 통해 Session 객체를 생성.
[ ChannelExec ]
JSch 라이브러리에서 원격 서버에 SSH로 명령어를 실행할 수 있는 채널 유형 중 하나. ( "exec" 타입 채널 )
단일 명령어 실행.
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
channelExec.connect();
- setCommand(String command) : 실행할 명령어를 설정.
(결과값 읽기)
1. InputStream에서 직접 대기하며 읽기 (실시간)
InputStream in = channelExec.getInputStream();
byte[] buffer = new byte[1024];
while (true) {
// 읽을 수 있는 데이터가 있는지 확인
if (in.available() > 0) {
int bytesRead = in.read(buffer);
System.out.print(new String(buffer, 0, bytesRead));
}
// 명령어가 종료되었는지 확인
if (channelExec.isClosed()) {
break;
}
}
channelExec.disconnect();
session.disconnect();
2. BufferedReader와 Stream API 사용.
BufferedReader reader = new BufferedReader(new InputStreamReader(channelExec.getInputStream()));
String result = reader.lines().collect(Collectors.joining("\n")); // 결과를 한 번에 수집
System.out.println(result); // 명령어 실행 결과 출력
System.out.println("Exit Status: " + channelExec.getExitStatus());
channelExec.disconnect();
session.disconnect();
'Java > 공부공부' 카테고리의 다른 글
[JAVA] JAR & WAR (0) | 2024.11.16 |
---|---|
[기타] System.out.println 실무에서 사용하면 안되는 이유 (0) | 2024.11.16 |
[Java] Stream API (Collectors 클래스) (0) | 2024.10.29 |
[JAVA] objectMapper, modelMapper (0) | 2024.10.25 |
[JAVA] 리플렉션 (Relection) (0) | 2024.10.25 |