반응형
package com.company.aa;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import com.jcraft.*;
public class Linux {
public void runCommand(String userName, String password, String ip, String command)
throws IOException, JSchException {
Channel channel = null;
// 1. 서버 연결
Session session = connect(userName, password, ip);
// 2. 리눅스 명령어 실행가능한 객체 생성
ChannelExec channelExec = makeChannelExec(session, channel);
// 3. 실행할 명령어 설정
setCommand(channelExec, command);
// 4. 응답값을 안 받아올 경우 실행하고 실행도중에 바로 연결을 끊기 때문에 그에 대한 응답값을 받아오는 과정이 필요하다
String result = getCommandReturn(channelExec);
// 5. 연결 끊기
disconnect(channel, session);
}
public String getReturn(String userName, String password, String ip, String command)
throws IOException, JSchException {
Channel channel = null;
// 1. 서버 연결
Session session = connect(userName, password, ip);
// 2. 리눅스 명령어 실행가능한 객체 생성
ChannelExec channelExec = makeChannelExec(session, channel);
// 3. 실행할 명령어 설정
setCommand(channelExec, command);
// 4. 명령어 결과를 읽어내는 과정
String result = getCommandReturn(channelExec);
// 5. 연결 끊기
disconnect(channel, session);
return result;
}
public void transferFile(String userName, String password, String ip, String sourcePath, String destinationPath)
throws IOException, JSchException, SftpException {
Channel channel = null;
// 서버 연결
Session session = connect(userName, password, ip);
// sftp 준비
ConnectChannelSftp(channel, session, sourcePath, destinationPath);
// 연결 끊기
disconnect(channel, session);
}
private void ConnectChannelSftp(Channel channel, Session session, String sourcePath, String destinationPath)
throws JSchException, SftpException {
ChannelSftp channelSftp = null;
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
channelSftp.put(sourcePath, destinationPath); // 파일을 전송하는 메소드
channelSftp.disconnect();
}
private ChannelExec makeChannelExec(Session session, Channel channel) throws JSchException {
// sftp 채널을 연다.
channel = session.openChannel("exec");
// 채널을 SSH용 채널 객체로 캐스팅한다 → 연 채널의 명령어를 입력할 수 있는 구조로 바꾸는 과정
ChannelExec channelExec = (ChannelExec) channel;
channelExec = (ChannelExec) session.openChannel("exec");
return channelExec;
}
private Session connect(String userName, String password, String ip) throws JSchException {
Session session = null;
// ssh 포트
int port = 22;
// JSch 객체[리눅스 연결]를 생성한다.
JSch jsch = new JSch();
session = jsch.getSession(userName, ip, port);
// 패스워드를 설정한다.
session.setPassword(password);
// 세션과 관련된 정보를 설정한다.
java.util.Properties config = new java.util.Properties();
// 호스트 정보를 검사하지 않는다.
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
// 접속한다.
session.connect();
return session;
}
private void disconnect(Channel channel, Session session) {
if (channel != null)
channel.disconnect();
if (session != null)
session.disconnect();
}
private void setCommand(ChannelExec channelExec, String command) throws IOException, JSchException {
// 7. 명령어 실행할 명령어 설정
channelExec.setCommand(command);
channelExec.connect();
channelExec.setErrStream(System.err);
}
public String getCommandReturn(ChannelExec channelExec) throws IOException, JSchException {
// 8. 명령어 결과를 읽어 과정
BufferedReader inputStream = new BufferedReader(new InputStreamReader(channelExec.getInputStream(), "utf-8"));
StringBuilder response = new StringBuilder();
String line;
while ((line = inputStream.readLine()) != null) {
response.append(line + '\n');
// System.out.println(line);
}
return response.toString();
}
}
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
반응형
'[Java] > [Java Code]' 카테고리의 다른 글
[Java Code] 문자열을 숫자로 형변환 (0) | 2022.04.23 |
---|---|
[Java Code] Json 화면에 뿌리기 (0) | 2022.03.01 |
[Java Code] Pagination Select Box (0) | 2022.02.18 |
[Java Code] Pagination (0) | 2022.02.18 |
[Java Code] 파일 읽어 데이터 가져오기 (0) | 2022.02.12 |